]> xenbits.xensource.com Git - people/ssmith/nc2-2.6.27.git/commitdiff
patch CA-24267-blkback-unpause
authorSteven Smith <ssmith@weybridge.uk.xensource.com>
Tue, 30 Jun 2009 11:55:47 +0000 (12:55 +0100)
committerSteven Smith <ssmith@weybridge.uk.xensource.com>
Tue, 30 Jun 2009 11:55:47 +0000 (12:55 +0100)
drivers/xen/blkback/xenbus.c

index 50abb4a196348ce6f9797ff065c625d86b2bec91..480138550b9c8321e37a659dbea09533065529ce 100644 (file)
@@ -346,14 +346,16 @@ static int blkback_remove(struct xenbus_device *dev)
 void blkback_close(blkif_t *blkif)
 {
        blkif_disconnect(blkif);
+
+       down(&blkback_dev_sem);
+
        vbd_free(&blkif->vbd);
        blkif->be->major = 0;
        blkif->be->minor = 0;
        blkif->remove_requested = 0;
-
-       down(&blkback_dev_sem);
        if (blkif->be->dev)
                xenvbd_sysfs_delif(blkif->be->dev);
+
        up(&blkback_dev_sem);
 
        backend_release(blkif->be);
@@ -439,7 +441,10 @@ void blkback_signal_resumed(blkif_t *blkif)
 
        down(&blkback_dev_sem);
        if (be->dev) {
-               connect(be);
+               if (blkif->vbd.bdev &&
+                   be->dev->state == XenbusStateConnected)
+                       connect(be);
+
                err = xenbus_rm(XBT_NIL, be->dev->nodename, "pause-done");
                if (err)
                        xenbus_dev_error(be->dev, err, "removing pause-done");