This version uses op blockers for the target image in the drive-mirror job, but the implementation of 'x-blockdev-del' remains the same. I copy the description from the previous series:
The semantics of 'x-blockdev-del' try to mirror the semantics of 'blockdev-add' as I discussed with Kevin in the previous thread. There's two parameters: 'id' and 'node-name' and only one can be specified. 1) 'x-blockdev-del id=foo' deletes the backend foo with its BDS, if and only if neither have more than 1 reference and the BDS has no parents and no op blockers. 2) 'x-blockdev-del node-name=foo' deletes the BDS foo, if and only if it only has one reference, no parents, no op blockers AND it is not attached to any block backend. Regards, Berto v3: - Remove the extra references added in v2 to the mirror and backup jobs, and use op blockers instead (for the mirror case only). v2: https://lists.gnu.org/archive/html/qemu-block/2015-10/msg00828.html - Rename it as 'x-blockdev-del' and label it as experimental. - Use two parameters instead of just one. If you try to delete a BDS, it must not be attached to any backend. - New test cases. - Hold extra references during the mirror and backup block jobs. v1: https://lists.gnu.org/archive/html/qemu-devel/2015-10/msg02999.html - Initial implementation Alberto Garcia (4): mirror: block all operations on the target image during the job block: Add blk_get_refcnt() block: Add 'x-blockdev-del' QMP command iotests: Add tests for the x-blockdev-del command block/block-backend.c | 5 + block/mirror.c | 4 + blockdev.c | 66 +++++++ include/sysemu/block-backend.h | 1 + qapi/block-core.json | 32 +++- qmp-commands.hx | 46 ++++- tests/qemu-iotests/139 | 408 +++++++++++++++++++++++++++++++++++++++++ tests/qemu-iotests/139.out | 5 + tests/qemu-iotests/group | 1 + 9 files changed, 564 insertions(+), 4 deletions(-) create mode 100644 tests/qemu-iotests/139 create mode 100644 tests/qemu-iotests/139.out -- 2.6.1