v3 was here: https://lists.gnu.org/archive/html/qemu-devel/2025-04/msg04525.html
In v4: - Rearrange series a bit to try and simplify logic for how zero bitmap is populated, when pre-zeroing is attempted, and how detect-zeroes=unmap interacts [Sunny] - Add a couple new patches to make this easier to follow - iotest tweaks [Stefan] 001/13:[----] [--] 'block: Expand block status mode from bool to flags' 002/13:[----] [--] 'file-posix, gluster: Handle zero block status hint better' 003/13:[----] [--] 'block: Let bdrv_co_is_zero_fast consolidate adjacent extents' 004/13:[----] [--] 'block: Add new bdrv_co_is_all_zeroes() function' 005/13:[----] [--] 'iotests: Improve iotest 194 to mirror data' 006/13:[----] [--] 'mirror: Minor refactoring' 007/13:[down] 'mirror: Pass full sync mode rather than bool to internals' 008/13:[0038] [FC] 'mirror: Allow QMP override to declare target already zero' 009/13:[down] 'mirror: Drop redundant zero_target parameter' 010/13:[0063] [FC] 'mirror: Skip pre-zeroing destination if it is already zero' 011/13:[0021] [FC] 'mirror: Skip writing zeroes when target is already zero' 012/13:[----] [--] 'iotests/common.rc: add disk_usage function' 013/13:[0013] [FC] 'tests: Add iotest mirror-sparse for recent patches' Andrey Drobyshev (1): iotests/common.rc: add disk_usage function Eric Blake (12): block: Expand block status mode from bool to flags file-posix, gluster: Handle zero block status hint better block: Let bdrv_co_is_zero_fast consolidate adjacent extents block: Add new bdrv_co_is_all_zeroes() function iotests: Improve iotest 194 to mirror data mirror: Minor refactoring mirror: Pass full sync mode rather than bool to internals mirror: Allow QMP override to declare target already zero mirror: Drop redundant zero_target parameter mirror: Skip pre-zeroing destination if it is already zero mirror: Skip writing zeroes when target is already zero tests: Add iotest mirror-sparse for recent patches qapi/block-core.json | 8 +- block/coroutines.h | 4 +- include/block/block-common.h | 11 + include/block/block-io.h | 2 + include/block/block_int-common.h | 27 +- include/block/block_int-global-state.h | 4 +- include/block/block_int-io.h | 4 +- block/io.c | 126 +++++-- block/blkdebug.c | 6 +- block/copy-before-write.c | 4 +- block/file-posix.c | 5 +- block/gluster.c | 4 +- block/iscsi.c | 6 +- block/mirror.c | 183 ++++++++--- block/nbd.c | 4 +- block/null.c | 6 +- block/parallels.c | 6 +- block/qcow.c | 2 +- block/qcow2.c | 6 +- block/qed.c | 6 +- block/quorum.c | 4 +- block/raw-format.c | 4 +- block/rbd.c | 6 +- block/snapshot-access.c | 4 +- block/vdi.c | 4 +- block/vmdk.c | 2 +- block/vpc.c | 2 +- block/vvfat.c | 6 +- blockdev.c | 27 +- tests/unit/test-block-iothread.c | 2 +- tests/qemu-iotests/common.rc | 6 + tests/qemu-iotests/194 | 7 +- tests/qemu-iotests/194.out | 4 +- tests/qemu-iotests/250 | 5 - tests/qemu-iotests/iotests.py | 12 +- tests/qemu-iotests/tests/mirror-sparse | 125 +++++++ tests/qemu-iotests/tests/mirror-sparse.out | 365 +++++++++++++++++++++ 37 files changed, 850 insertions(+), 159 deletions(-) create mode 100755 tests/qemu-iotests/tests/mirror-sparse create mode 100644 tests/qemu-iotests/tests/mirror-sparse.out -- 2.49.0