summaryrefslogtreecommitdiffstats
path: root/device-hotplug.c
diff options
context:
space:
mode:
authorMax Reitz <mreitz@redhat.com>2016-03-16 19:54:38 +0100
committerTimothy Pearson <tpearson@raptorengineering.com>2019-11-29 19:49:38 -0600
commitc7e0d6cdc14a8bc252e7e1a092eab365535bee10 (patch)
tree3a63ba4c5e4237447872afc63fd997159a92272e /device-hotplug.c
parentbe82c7e58e0bc0fe57f5640370b16dde60ae954a (diff)
downloadhqemu-c7e0d6cdc14a8bc252e7e1a092eab365535bee10.zip
hqemu-c7e0d6cdc14a8bc252e7e1a092eab365535bee10.tar.gz
blockdev: Split monitor reference from BB creation
Before this patch, blk_new() automatically assigned a name to the new BlockBackend and considered it referenced by the monitor. This patch removes the implicit monitor_add_blk() call from blk_new() (and consequently the monitor_remove_blk() call from blk_delete(), too) and thus blk_new() (and related functions) no longer take a BB name argument. In fact, there is only a single point where blk_new()/blk_new_open() is called and the new BB is monitor-owned, and that is in blockdev_init(). Besides thus relieving us from having to invent names for all of the BBs we use in qemu-img, this fixes a bug where qemu cannot create a new image if there already is a monitor-owned BB named "image". If a BB and its BDS tree are created in a single operation, as of this patch the BDS tree will be created before the BB is given a name (whereas it was the other way around before). This results in minor change to the output of iotest 087, whose reference output is amended accordingly. Signed-off-by: Max Reitz <mreitz@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Diffstat (limited to 'device-hotplug.c')
-rw-r--r--device-hotplug.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/device-hotplug.c b/device-hotplug.c
index 3e5cdaa..126f73c 100644
--- a/device-hotplug.c
+++ b/device-hotplug.c
@@ -84,6 +84,8 @@ void hmp_drive_add(Monitor *mon, const QDict *qdict)
err:
if (dinfo) {
- blk_unref(blk_by_legacy_dinfo(dinfo));
+ BlockBackend *blk = blk_by_legacy_dinfo(dinfo);
+ monitor_remove_blk(blk);
+ blk_unref(blk);
}
}
OpenPOWER on IntegriCloud