]> xenbits.xensource.com Git - people/ssmith/nc2-2.6.27.bak/.git/commitdiff
patch CA-9002-blktap-plug
authorSteven Smith <ssmith@weybridge.uk.xensource.com>
Thu, 28 May 2009 10:54:19 +0000 (11:54 +0100)
committerSteven Smith <ssmith@weybridge.uk.xensource.com>
Thu, 28 May 2009 10:54:19 +0000 (11:54 +0100)
drivers/xen/blktap/xenbus.c

index 1291d557e8823b6cc6790fc9f9b6064c555f40fb..6b25526a3bb8994b89141ff58d4458910af6ec5d 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) {