--- /dev/null
+From 3661371701e714f0cea4120f6a365340858fb4e4 Mon Sep 17 00:00:00 2001
+From: David Vrabel <david.vrabel@citrix.com>
+Date: Tue, 4 Feb 2014 18:53:56 +0000
+Subject: xen-blkfront: handle backend CLOSED without CLOSING
+
+From: David Vrabel <david.vrabel@citrix.com>
+
+commit 3661371701e714f0cea4120f6a365340858fb4e4 upstream.
+
+Backend drivers shouldn't transistion to CLOSED unless the frontend is
+CLOSED. If a backend does transition to CLOSED too soon then the
+frontend may not see the CLOSING state and will not properly shutdown.
+
+So, treat an unexpected backend CLOSED state the same as CLOSING.
+
+Signed-off-by: David Vrabel <david.vrabel@citrix.com>
+Acked-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
+Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/block/xen-blkfront.c | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+--- a/drivers/block/xen-blkfront.c
++++ b/drivers/block/xen-blkfront.c
+@@ -1303,13 +1303,16 @@ static void blkback_changed(struct xenbu
+ case XenbusStateReconfiguring:
+ case XenbusStateReconfigured:
+ case XenbusStateUnknown:
+- case XenbusStateClosed:
+ break;
+
+ case XenbusStateConnected:
+ blkfront_connect(info);
+ break;
+
++ case XenbusStateClosed:
++ if (dev->state == XenbusStateClosed)
++ break;
++ /* Missed the backend's Closing state -- fallthrough */
+ case XenbusStateClosing:
+ blkfront_closing(info);
+ break;