aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/block/xen-blkfront.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/drivers/block/xen-blkfront.c b/drivers/block/xen-blkfront.c
index ca13df854639..6ba8891e8efe 100644
--- a/drivers/block/xen-blkfront.c
+++ b/drivers/block/xen-blkfront.c
@@ -2485,10 +2485,23 @@ static void blkback_changed(struct xenbus_device *dev,
2485 break; 2485 break;
2486 2486
2487 case XenbusStateConnected: 2487 case XenbusStateConnected:
2488 if (dev->state != XenbusStateInitialised) { 2488 /*
2489 * talk_to_blkback sets state to XenbusStateInitialised
2490 * and blkfront_connect sets it to XenbusStateConnected
2491 * (if connection went OK).
2492 *
2493 * If the backend (or toolstack) decides to poke at backend
2494 * state (and re-trigger the watch by setting the state repeatedly
2495 * to XenbusStateConnected (4)) we need to deal with this.
2496 * This is allowed as this is used to communicate to the guest
2497 * that the size of disk has changed!
2498 */
2499 if ((dev->state != XenbusStateInitialised) &&
2500 (dev->state != XenbusStateConnected)) {
2489 if (talk_to_blkback(dev, info)) 2501 if (talk_to_blkback(dev, info))
2490 break; 2502 break;
2491 } 2503 }
2504
2492 blkfront_connect(info); 2505 blkfront_connect(info);
2493 break; 2506 break;
2494 2507