This partially fixes iotest 177 with qcow2, where max_transfer is 64KiB, but the cluster size and thus pwrite_zeroes_alignment is 1MiB. Previously, max_transfer would be calculated as 0, triggering an assertion later.
Signed-off-by: Fiona Ebner <[email protected]> --- block/io.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/block/io.c b/block/io.c index 12dc153573..233b2617ea 100644 --- a/block/io.c +++ b/block/io.c @@ -2087,8 +2087,10 @@ bdrv_aligned_pwritev(BdrvChild *child, BdrvTrackedRequest *req, assert(is_power_of_2(align)); assert((offset & (align - 1)) == 0); assert((bytes & (align - 1)) == 0); - max_transfer = QEMU_ALIGN_DOWN(MIN_NON_ZERO(bs->bl.max_transfer, INT_MAX), - align); + max_transfer = MIN_NON_ZERO(bs->bl.max_transfer, INT_MAX); + if (max_transfer > align) { + max_transfer = QEMU_ALIGN_DOWN(max_transfer, align); + } ret = bdrv_co_write_req_prepare(child, offset, bytes, req, flags); -- 2.47.3
