]> xenbits.xensource.com Git - xenclient/kernel.git/commitdiff
imported patch CA-24267-blkback-unpause CA-20346-blktap-vma-unmap
authort_jeang <devnull@localhost>
Tue, 6 Jan 2009 12:06:01 +0000 (12:06 +0000)
committert_jeang <devnull@localhost>
Tue, 6 Jan 2009 12:06:01 +0000 (12:06 +0000)
drivers/xen/blkback/xenbus.c

index 775f723d767f18ea35be0e5e78eeb4c3ed7b4b7c..7dcc69667b5c888e74af698a7b20fff1f6b593d8 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");