Fully preallocated truncation has a 50 % chance of working on images files over file-posix. It works if $SIZE % 4G < 2G, and it fails otherwise. To make things even more interesting, often you would not even notice because qemu reported success even though it did nothing (because after the successful lseek(), errno was still 0, so when the file-posix driver tried to return a negative error code, it actually reported success).
This issue is fixed by patch 1 in this series. Thanks to Daniel for reporting! Max Reitz (2): block/file-posix: Fix fully preallocated truncate iotests: Test preallocated truncate of 2G image block/file-posix.c | 5 +++-- tests/qemu-iotests/106 | 24 ++++++++++++++++++++++++ tests/qemu-iotests/106.out | 10 ++++++++++ 3 files changed, 37 insertions(+), 2 deletions(-) -- 2.14.3