ping 02.08.2021 21:54, Vladimir Sementsov-Ogievskiy wrote:
Hi all! As a continuation of "Qemu block filter insertion/removal API" discussion, here is my proposal of blockdev-replace. The realization allows: - replace children of different parents: BDS, block devices, block exports - automatically replace all parents of specific BDS, excluding creating loops (like bdrv_replace_node()) - do several replacements in one transaction It's an untested draft, so you may go to patch 8, to look at QAPI addition. Vladimir Sementsov-Ogievskiy (8): block-backend: blk_root(): drop const specifier on return type block: add BlockParentClass class block: realize BlockParentClass for BlockDriverState block/export: realize BlockParentClass functionality qdev: improve find_device_state() to distinguish simple not found case qdev: realize BlockParentClass block: improve bdrv_replace_node_noperm() qapi: add blockdev-replace command qapi/block-core.json | 78 ++++++++++++++++ include/block/block-parent.h | 32 +++++++ include/sysemu/block-backend.h | 2 +- block.c | 158 ++++++++++++++++++++++++++++++++- block/block-backend.c | 2 +- block/block-parent.c | 66 ++++++++++++++ block/export/export.c | 44 +++++++++ softmmu/qdev-monitor.c | 90 +++++++++++++++---- block/meson.build | 1 + 9 files changed, 453 insertions(+), 20 deletions(-) create mode 100644 include/block/block-parent.h create mode 100644 block/block-parent.c
-- Best regards, Vladimir