On 02.10.25 21:39, Stefan Hajnoczi wrote:
This series fixes a bug I introduced in commit 5634622bcb33 ("file-posix: allow
BLKZEROOUT with -t writeback"). The Linux fallocate(2) and ioctl(BLKZEROOUT)
syscalls require logical block size alignment of the offset and length, even
when the file is opened in buffered I/O mode where read/write operations do not
require alignment.
The fix is to populate the pwrite_zeroes_alignment block limits field and to
use that limit in create_file_fallback_zero_first_sector().
One issue I want to raise is that pwrite_zeroes_alignment is an "optimal
alignment" hint. Hence create_file_fallback_zero_first_sector() had to be
modified to honor the limit explicitly.
Probably, this place had to be modified anyway, even if we support "required
write zeroes alignment" generically, it seems better to do write-zeroes
on first smallest "write-zero-able" sector than fallback to normal write of zero
data (or even to read/modify/write).
The block layer doesn't automatically
apply padding in order to align requests. This is different from how QEMU's
block layer pwrite/pread works, where it does automatically apply padding and
read/modify/write as necessary. If you want consistency, please let me know.
Stefan Hajnoczi (3):
file-posix: populate pwrite_zeroes_alignment
block: use pwrite_zeroes_alignment when writing first sector
iotests: add Linux loop device image creation test
include/system/block-backend-io.h | 1 +
block.c | 3 +-
block/block-backend.c | 11 ++++
block/file-posix.c | 17 ++++++
tests/qemu-iotests/tests/loop-create-file | 59 +++++++++++++++++++
tests/qemu-iotests/tests/loop-create-file.out | 8 +++
6 files changed, 98 insertions(+), 1 deletion(-)
create mode 100755 tests/qemu-iotests/tests/loop-create-file
create mode 100644 tests/qemu-iotests/tests/loop-create-file.out
--
Best regards,
Vladimir