Kevin Wolf <kw...@redhat.com> writes: > This series adds a mechanism that allows the user or management tool to > manually activate and inactivate block nodes instead of fully relying on > the automatic management in the migration code. > > One case where this is needed is for migration with shared storage and > devices backed by qemu-storage-daemon, which as an external process is > not involved in the VM migration. Management tools can manually > orchestrate the handover in this scenario. The new qemu-iotests case > qsd-migrate demonstrates this. > > There are other cases without qemu-storage-daemon where manual > management is necessary. For example, after migration, the destination > VM only activates images on 'cont', but after migrating a paused VM, the > user may want to perform operations on a block node while the VM is > still paused. > > This series adds support for block exports on an inactive node (needed > for shared storage migration with qemu-storage-daemon) only to NBD. > Adding it to other export types will be done in a future series. > > v2: > - Added a comprehensive test case that tests how inactive nodes > interoperate with many operations > - Added a couple of fixes for bugs uncovered by the tests (that would > usually lead to crashes when an unsupported operation is performed on > inactive nodes) > - Added 'active' status to query-block information > > Kevin Wolf (15): > block: Add 'active' field to BlockDeviceInfo > block: Inactivate external snapshot overlays when necessary > migration/block-active: Remove global active flag > block: Don't attach inactive child to active node > block: Allow inactivating already inactive nodes > block: Fix crash on block_resize on inactive node > block: Add option to create inactive nodes > block: Add blockdev-set-active QMP command > block: Support inactive nodes in blk_insert_bs() > block/export: Don't ignore image activation error in blk_exp_add() > block/export: Add option to allow export of inactive nodes > nbd/server: Support inactive nodes > iotests: Add filter_qtest() > iotests: Add qsd-migrate case > iotests: Add (NBD-based) tests for inactive nodes > > qapi/block-core.json | 44 ++- > qapi/block-export.json | 10 +- > include/block/block-common.h | 1 + > include/block/block-global-state.h | 6 + > include/block/export.h | 3 + > migration/migration.h | 3 - > block.c | 62 +++- > block/block-backend.c | 16 +- > block/export/export.c | 29 +- > block/monitor/block-hmp-cmds.c | 5 +- > block/qapi.c | 1 + > blockdev.c | 48 +++ > migration/block-active.c | 46 --- > migration/migration.c | 8 - > nbd/server.c | 17 + > tests/qemu-iotests/iotests.py | 8 + > tests/qemu-iotests/041 | 4 +- > tests/qemu-iotests/165 | 4 +- > tests/qemu-iotests/184.out | 2 + > tests/qemu-iotests/191.out | 16 + > tests/qemu-iotests/273.out | 5 + > tests/qemu-iotests/tests/copy-before-write | 3 +- > tests/qemu-iotests/tests/inactive-node-nbd | 303 ++++++++++++++++++ > .../qemu-iotests/tests/inactive-node-nbd.out | 239 ++++++++++++++ > tests/qemu-iotests/tests/migrate-bitmaps-test | 7 +- > tests/qemu-iotests/tests/qsd-migrate | 132 ++++++++ > tests/qemu-iotests/tests/qsd-migrate.out | 51 +++ > 27 files changed, 986 insertions(+), 87 deletions(-) > create mode 100755 tests/qemu-iotests/tests/inactive-node-nbd > create mode 100644 tests/qemu-iotests/tests/inactive-node-nbd.out > create mode 100755 tests/qemu-iotests/tests/qsd-migrate > create mode 100644 tests/qemu-iotests/tests/qsd-migrate.out
Series: Acked-by: Fabiano Rosas <faro...@suse.de> I checked that this series doesn't regress the original double inactivate issue fixed by Peter Xu [1]. I also ported the tests[2] on top of this and everything looks good. Thanks! 1- 8597af7615 (migration/block: Rewrite disk activation, 2024-12-06) 2- https://lore.kernel.org/r/20241125144612.16194-6-faro...@suse.de