v4: Switch to new fleecing scheme, more native for Qemu's block-layer, see new patches 10-12 for details.
01,02: add Hanna's r-b 03: add const, add forgotten bdrv_release_dirty_bitmap() 04: rewrite bitmap parameter parsing 05: add Hanna's r-b 06: tiny wording fixes 07: new 08: fix comments, improve interface of new functions 09: fix grammar, add Hanna's and Nikita's r-bs 10-12: new fleecing scheme tests: updated to use new fleecing scheme === These series brings several improvements to fleecing scheme: 1. support bitmap in copy-before-write filter 2. introduce snapshot-access API and filter, to make a new fleecing scheme. See "block: copy-before-write: realize snapshot-access API" commit message for details. 3. support "push backup with fleecing" scheme, when backup job is a client of common fleecing scheme. That helps when writes to final backup target are slow and we don't want guest writes hang waiting for copy-before-write operations to final target. Vladimir Sementsov-Ogievskiy (18): block/block-copy: move copy_bitmap initialization to block_copy_state_new() block/dirty-bitmap: bdrv_merge_dirty_bitmap(): add return value block/block-copy: block_copy_state_new(): add bitmap parameter block/copy-before-write: add bitmap open parameter block/block-copy: add block_copy_reset() block: intoduce reqlist block/reqlist: reqlist_find_conflict(): use ranges_overlap() block/dirty-bitmap: introduce bdrv_dirty_bitmap_status() block/reqlist: add reqlist_wait_all() block/io: introduce block driver snapshot-access API block: introduce snapshot-access filter block: copy-before-write: realize snapshot-access API iotests/image-fleecing: add test-case for fleecing format node iotests.py: add qemu_io_pipe_and_status() iotests/image-fleecing: add test case with bitmap block: blk_root(): return non-const pointer qapi: backup: add immutable-source parameter iotests/image-fleecing: test push backup with fleecing qapi/block-core.json | 25 +- include/block/block-copy.h | 2 + include/block/block_int.h | 28 +++ include/block/dirty-bitmap.h | 4 +- include/block/reqlist.h | 75 ++++++ include/qemu/hbitmap.h | 12 + include/sysemu/block-backend.h | 2 +- block/backup.c | 61 ++++- block/block-backend.c | 2 +- block/block-copy.c | 150 +++++------ block/copy-before-write.c | 265 +++++++++++++++++++- block/dirty-bitmap.c | 15 +- block/io.c | 69 +++++ block/monitor/bitmap-qmp-cmds.c | 5 +- block/replication.c | 2 +- block/reqlist.c | 85 +++++++ block/snapshot-access.c | 132 ++++++++++ blockdev.c | 1 + util/hbitmap.c | 33 +++ MAINTAINERS | 5 +- block/meson.build | 2 + tests/qemu-iotests/iotests.py | 4 + tests/qemu-iotests/tests/image-fleecing | 175 ++++++++++--- tests/qemu-iotests/tests/image-fleecing.out | 223 +++++++++++++++- 24 files changed, 1227 insertions(+), 150 deletions(-) create mode 100644 include/block/reqlist.h create mode 100644 block/reqlist.c create mode 100644 block/snapshot-access.c -- 2.31.1