]> xenbits.xen.org Git - xenclient/kernel.git/commitdiff
imported patch CA-9002-blktap-plug CA-8806-blk-dont-reconnect-on-unplug
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/blktap/xenbus.c

index 11fc8bf7a1f2d6ecad885ce3a32c7c2599c11d8e..5591f95082a14dbab50d1b53ed824f5da58f0187 100644 (file)
@@ -415,6 +415,10 @@ static void blktap_reconnect(struct backend_info *be)
        be->shutdown_signalled = 0;
 
        xenbus_switch_state(dev, XenbusStateInitWait);
+
+       err = xenbus_write(XBT_NIL, be->nodename, "start-tapdisk", "");
+       if (err)
+               xenbus_dev_fatal(be->dev, err, "restarting tapdisk");
 }
 
 static void tap_update_blkif_status(blkif_t *blkif)
@@ -517,6 +521,11 @@ static int blktap_probe(struct xenbus_device *dev,
        err = xenbus_switch_state(dev, XenbusStateInitWait);
        if (err)
                goto fail;
+
+       err = xenbus_write(XBT_NIL, dev->nodename, "start-tapdisk", "");
+       if (err)
+               goto fail;
+
        return 0;
 
 fail:
@@ -554,6 +563,12 @@ static void tap_backend_changed(struct xenbus_watch *watch,
                return;
        }
 
+       if (dev->state != XenbusStateInitWait) {
+               WPRINTK("%s: tapdisk ready, but blktap at %s\n",
+                       __func__, xenbus_strstate(dev->state));
+               return;
+       }
+
        err = xenbus_gather(XBT_NIL, dev->nodename, "sectors", "%llu", 
                            &be->blkif->sectors, NULL);
        if (err) {