Hi all!

This series presents a new command blockdev-replace, which helps to
insert/remove filters anywhere in the block graph. It can:

 - replace qdev block-node by qdev-id
 - replace export block-node by export-id
 - replace any child of parent block-node by node-name and child name

So insertions is done in two steps:

1. blockdev_add (create filter node, unparented)

    [some parent]  [new filter]
     |               |
     V               V
    [        some child       ]

2. blockdev-replace (replace child by the filter)

    [some parent]
     | 
     V
    [new filter]
     |
     V
    [some child]

And removal is done in reverse order:

1. blockdev-replace (go back to picture 1)
2. blockdev_del (remove filter node)

Ideally, we should do both operations (add + replace or replace + del) in a
transaction, but that should be another series.

v10: reabsed on master.
02: change exp-blk check into assert
04: rewrite to simpler API (on unique parent id)
07: switch to new API
08: new

Vladimir Sementsov-Ogievskiy (8):
  block-backend: blk_root(): drop const specifier on return type
  block/export: add blk_by_export_id()
  block: make bdrv_find_child() function public
  qapi: add blockdev-replace command
  block: bdrv_get_xdbg_block_graph(): report export ids
  iotests.py: introduce VM.assert_edges_list() method
  iotests: add filter-insertion
  deprecate names duplication between qdev, block-node and block-export

 block.c                                       |  29 +++
 block/block-backend.c                         |   2 +-
 block/export/export.c                         |  41 ++++
 blockdev.c                                    |  82 +++++--
 docs/about/deprecated.rst                     |  10 +
 include/block/block-global-state.h            |   1 +
 include/block/block_int-io.h                  |   2 +
 include/block/export.h                        |   1 +
 include/system/block-backend-global-state.h   |   5 +-
 qapi/block-core.json                          |  24 ++
 stubs/blk-by-qdev-id.c                        |  18 ++
 stubs/blk-exp-find-by-blk.c                   |  13 +
 stubs/meson.build                             |   2 +
 system/qdev-monitor.c                         |  16 ++
 tests/qemu-iotests/iotests.py                 |  17 ++
 tests/qemu-iotests/tests/filter-insertion     | 222 ++++++++++++++++++
 tests/qemu-iotests/tests/filter-insertion.out |   5 +
 17 files changed, 474 insertions(+), 16 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/filter-insertion
 create mode 100644 tests/qemu-iotests/tests/filter-insertion.out

-- 
2.52.0

Reply via email to