Here's the new version of the blockdev-del command. The first change is that I renamed it to 'x-blockdev-del' as Markus suggested.
I also extended the test cases, which should be way more robust now. This actually made me realize that there's tricky scenarios that require changes in other parts of the code. The main example is the 'drive-mirror' block job. During the operation the target image has a node name and is only referenced by the monitor, so there's nothing preventing its deletion using 'x-blockdev-del'. I added an extra reference to solve that. 'drive-backup' has the same problem. Although the user cannot set the node name here, we are auto-generating them now so the command is also vulnerable to this. The semantics of 'x-blockdev-del' also changed a bit, trying to mirror the semantics of 'blockdev-add' as I discussed with Kevin on 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. 2) 'x-blockdev-del node-name=foo' deletes the BDS foo, if and only if it only has one reference, no parents AND it is not attached to any block backend. Thank you all for your feedback. Regards, Berto v2: - 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 (5): mirror: keep an extra reference to the target image during the job backup: keep an extra reference to 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/backup.c | 5 + block/block-backend.c | 5 + block/mirror.c | 6 + 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 + 10 files changed, 571 insertions(+), 4 deletions(-) create mode 100644 tests/qemu-iotests/139 create mode 100644 tests/qemu-iotests/139.out -- 2.6.1