Outdated :(. I should rebase it on master, there are a lot of conflicts after Emanuele's series.
29.03.2022 23:40, Vladimir Sementsov-Ogievskiy wrote:
> Hi all!
>
> That's a big series, which unites some of my previous ones, and
> completes them with necessary additions to finally implement block-graph
> modifying API. The series is called "v4" as it inherits
> "[PATCH v3 00/11] blockdev-replace" (among other things).
>
> After this series, we have blockdev-add, blockdev-del and
> x-blockdev-replace transaction actions, which allows to insert and
> remove filters.
>
> Additional challenge is to avoid intermediate permission update. That's
> and existing paradigm of block graph modifications: first do all the
> modifications and then refresh the permissions. Now we should bring this
> paradigm to block-graph modifying transactions: if several graph
> modifying commands are sequential in one transaction, permission are
> updated after the last of these commands. The application of this is
> possibility to correct copy-before-write filter permission requirements
> (see last patch).
>
> I now unite all these things into one series because:
> - they depend on each other and I have to rebase them together when
> something needs fix or refactoring
> - just to resend with my new email address
> If needed, parts may go in separate, and I can split them again if
> necessary.
>
> So, what is here:
>
> 1. "[PATCH 00/14] block: cleanup backing and file handling" series,
> unchanged:
>
> block: BlockDriver: add .filtered_child_is_backing field
> block: introduce bdrv_open_file_child() helper
> block/blklogwrites: don't care to remove bs->file child on failure
> test-bdrv-graph-mod: update test_parallel_perm_update test case
> tests-bdrv-drain: bdrv_replace_test driver: declare supports_backing
> test-bdrv-graph-mod: fix filters to be filters
> block: document connection between child roles and
> bs->backing/bs->file
> block/snapshot: stress that we fallback to primary child
> Revert "block: Let replace_child_noperm free children"
> Revert "block: Let replace_child_tran keep indirect pointer"
> Revert "block: Restructure remove_file_or_backing_child()"
> Revert "block: Pass BdrvChild ** to replace_child_noperm"
> block: Manipulate bs->file / bs->backing pointers in .attach/.detach
> block/snapshot: drop indirection around bdrv_snapshot_fallback_ptr
>
> 2. implement bdrv_unref_tran() - the key thing to implement blockdev-del
> transaction action later.
> This part inherits from "[PATCH 00/14] block: blockdev-del force=false".
> Still force=false is not realized and qcow2 is untouched, as the target
> now is transactional removement.
>
> block: refactor bdrv_remove_file_or_backing_child to bdrv_remove_child
> block: drop bdrv_detach_child()
> block: drop bdrv_remove_filter_or_cow_child
> block: bdrv_refresh_perms(): allow external tran
> block: refactor bdrv_list_refresh_perms to allow any list of nodes
> block: make permission update functions public
> block: add bdrv_try_set_aio_context_tran transaction action
> block: implemet bdrv_unref_tran()
>
> 3. Move blockdev.c transactions to util/transactions.c API.
>
> blockdev: refactor transaction to use Transaction API
> blockdev: transactions: rename some things
> blockdev: qmp_transaction: refactor loop to classic for
> blockdev: transaction: refactor handling transaction properties
> blockdev: qmp_transaction: drop extra generic layer
>
> 4. add blockdev-del transaction action
>
> qapi: block: add blockdev-del transaction action
>
> 5. add blockdev-add transaction action
> (inherits from "[PATCH 0/2] blockdev-add transaction")
>
> block: introduce BDRV_O_NOPERM flag
> block: bdrv_insert_node(): use BDRV_O_NOPERM
> qapi: block: add blockdev-add transaction action
> iotests: add blockdev-add-transaction
>
> 6. add x-blockdev-replace command and transaction action
> (inherits from "[PATCH v3 00/11] blockdev-replace")
>
> block-backend: blk_root(): drop const specifier on return type
> block/export: add blk_by_export_id()
> block: make bdrv_find_child() function public
> block: bdrv_replace_child_bs(): move to external transaction
> qapi: add x-blockdev-replace command
> qapi: add x-blockdev-replace transaction action
> block: bdrv_get_xdbg_block_graph(): report export ids
> iotests.py: qemu_img_create: use imgfmt by default
> iotests.py: introduce VM.assert_edges_list() method
> iotests.py: add VM.qmp_check() helper
> iotests: add filter-insertion
>
> 7. Correct permission scheme of copy-before-write filter, with help of
> new design of graph-modifying API.
>
> block: bdrv_open_inherit: create BlockBackend only when necessary
> block/copy-before-write: correct permission scheme
>
> block.c | 869 ++++++++++--------
> block/blkdebug.c | 9 +-
> block/blklogwrites.c | 11 +-
> block/blkreplay.c | 7 +-
> block/blkverify.c | 9 +-
> block/block-backend.c | 10 +-
> block/bochs.c | 7 +-
> block/cloop.c | 7 +-
> block/commit.c | 1 +
> block/copy-before-write.c | 24 +-
> block/copy-on-read.c | 9 +-
> block/crypto.c | 11 +-
> block/dmg.c | 7 +-
> block/export/export.c | 31 +
> block/filter-compress.c | 6 +-
> block/mirror.c | 1 +
> block/monitor/block-hmp-cmds.c | 2 +-
> block/parallels.c | 7 +-
> block/preallocate.c | 9 +-
> block/qcow.c | 6 +-
> block/qcow2.c | 8 +-
> block/qed.c | 8 +-
> block/raw-format.c | 4 +-
> block/replication.c | 8 +-
> block/snapshot.c | 60 +-
> block/throttle.c | 8 +-
> block/vdi.c | 7 +-
> block/vhdx.c | 7 +-
> block/vmdk.c | 7 +-
> block/vpc.c | 7 +-
> blockdev.c | 818 +++++++++--------
> include/block/block.h | 72 +-
> include/block/block_int.h | 41 +-
> include/block/export.h | 1 +
> include/sysemu/block-backend.h | 3 +-
> qapi/block-core.json | 73 +-
> qapi/transaction.json | 35 +-
> stubs/blk-by-qdev-id.c | 9 +
> stubs/blk-exp-find-by-blk.c | 9 +
> stubs/meson.build | 2 +
> tests/qemu-iotests/iotests.py | 23 +
> .../tests/blockdev-add-transaction | 52 ++
> .../tests/blockdev-add-transaction.out | 6 +
> tests/qemu-iotests/tests/filter-insertion | 253 +++++
> tests/qemu-iotests/tests/filter-insertion.out | 5 +
> tests/qemu-iotests/tests/image-fleecing | 29 +-
> tests/qemu-iotests/tests/image-fleecing.out | 2 -
> tests/unit/test-bdrv-drain.c | 11 +-
> tests/unit/test-bdrv-graph-mod.c | 94 +-
> 49 files changed, 1715 insertions(+), 990 deletions(-)
> create mode 100644 stubs/blk-by-qdev-id.c
> create mode 100644 stubs/blk-exp-find-by-blk.c
> create mode 100755 tests/qemu-iotests/tests/blockdev-add-transaction
> create mode 100644 tests/qemu-iotests/tests/blockdev-add-transaction.out
> create mode 100755 tests/qemu-iotests/tests/filter-insertion
> create mode 100644 tests/qemu-iotests/tests/filter-insertion.out
>
--
Best regards,
Vladimir