On Wed 04 Nov 2015 07:57:44 PM CET, Max Reitz wrote: > @@ -3519,11 +3537,18 @@ void qmp_x_blockdev_del(bool has_id, const char *id, > bdrv_get_device_or_node_name(bs)); > goto out; > } > + > + if (!blk && !bs->monitor_list.tqe_prev) { > + error_setg(errp, "Node %s is not owned by the monitor", > + bs->node_name); > + goto out; > + } > } > > if (blk) { > blk_unref(blk); > } else { > + QTAILQ_REMOVE(&monitor_bdrv_states, bs, monitor_list); > bdrv_unref(bs); > }
blk_unref(blk) will also unref the BDS (if there's any), so you also need to update monitor_bdrv_states in that case, don't you? Anyway, wouldn't it make more sense to do this in bdrv_delete() ? Berto