summaryrefslogtreecommitdiffstats
path: root/drivers/xen/blkback/xenbus.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/xen/blkback/xenbus.c')
-rw-r--r--drivers/xen/blkback/xenbus.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/xen/blkback/xenbus.c b/drivers/xen/blkback/xenbus.c
index a0534fc..031bc3d 100644
--- a/drivers/xen/blkback/xenbus.c
+++ b/drivers/xen/blkback/xenbus.c
@@ -382,6 +382,11 @@ static void frontend_changed(struct xenbus_device *dev,
if (dev->state == XenbusStateConnected)
break;
+ /* Enforce precondition before potential leak point.
+ * blkif_disconnect() is idempotent.
+ */
+ blkif_disconnect(be->blkif);
+
err = connect_ring(be);
if (err)
break;
@@ -399,6 +404,7 @@ static void frontend_changed(struct xenbus_device *dev,
break;
/* fall through if not online */
case XenbusStateUnknown:
+ /* implies blkif_disconnect() via blkback_remove() */
device_unregister(&dev->dev);
break;
OpenPOWER on IntegriCloud