[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH] xen-block: Fix removal of backend instance via xenstore
On 08/03/2021 14:32, Anthony PERARD wrote: From: Anthony PERARD <anthony.perard@xxxxxxxxxx> Whenever a Xen block device is detach via xenstore, the image associated with it remained open by the backend QEMU and an error is logged: qemu-system-i386: failed to destroy drive: Node xvdz-qcow2 is in use This happened since object_unparent() doesn't immediately frees the object and thus keep a reference to the node we are trying to free. The reference is hold by the "drive" property and the call xen_block_drive_destroy() fails. In order to fix that, we call drain_call_rcu() to run the callback setup by bus_remove_child() via object_unparent(). Fixes: 2d24a6466154 ("device-core: use RCU for list of children of a bus") Signed-off-by: Anthony PERARD <anthony.perard@xxxxxxxxxx> --- CCing people whom introduced/reviewed the change to use RCU to give them a chance to say if the change is fine. --- hw/block/xen-block.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/hw/block/xen-block.c b/hw/block/xen-block.c index a3b69e27096f..fe5f828e2d25 100644 --- a/hw/block/xen-block.c +++ b/hw/block/xen-block.c @@ -972,6 +972,15 @@ static void xen_block_device_destroy(XenBackendInstance *backend,object_unparent(OBJECT(xendev)); + /*+ * Drall all pending RCU callbacks as object_unparent() frees `xendev' s/Drall/Drain ? + * in a RCU callback. + * And due to the property "drive" still existing in `xendev', we + * cann't destroy the XenBlockDrive associated with `xendev' with s/cann't/can't With those fixed... Reviewed-by: Paul Durrant <paul@xxxxxxx> + * xen_block_drive_destroy() below. + */ + drain_call_rcu(); + if (iothread) { xen_block_iothread_destroy(iothread, errp); if (*errp) {
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |