aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/pci/xen-pcifront.c
diff options
context:
space:
mode:
authorDavid Vrabel <david.vrabel@citrix.com>2012-10-18 06:03:36 -0400
committerBjorn Helgaas <bhelgaas@google.com>2012-11-30 16:33:35 -0500
commitd5af64de2d1cc87d77ac7c0e90d89630a37a4f09 (patch)
treed1fe66a02d41848614c39adde978ca1fcd08cf25 /drivers/pci/xen-pcifront.c
parent918b4053184c0ca22236e70e299c5343eea35304 (diff)
xen-pcifront: Handle backend CLOSED without CLOSING
Backend drivers shouldn't transition 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> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> Acked-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Diffstat (limited to 'drivers/pci/xen-pcifront.c')
-rw-r--r--drivers/pci/xen-pcifront.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/drivers/pci/xen-pcifront.c b/drivers/pci/xen-pcifront.c
index 0aab85a51559..a0c73120b262 100644
--- a/drivers/pci/xen-pcifront.c
+++ b/drivers/pci/xen-pcifront.c
@@ -1068,13 +1068,16 @@ static void __init_refok pcifront_backend_changed(struct xenbus_device *xdev,
1068 case XenbusStateInitialising: 1068 case XenbusStateInitialising:
1069 case XenbusStateInitWait: 1069 case XenbusStateInitWait:
1070 case XenbusStateInitialised: 1070 case XenbusStateInitialised:
1071 case XenbusStateClosed:
1072 break; 1071 break;
1073 1072
1074 case XenbusStateConnected: 1073 case XenbusStateConnected:
1075 pcifront_try_connect(pdev); 1074 pcifront_try_connect(pdev);
1076 break; 1075 break;
1077 1076
1077 case XenbusStateClosed:
1078 if (xdev->state == XenbusStateClosed)
1079 break;
1080 /* Missed the backend's CLOSING state -- fallthrough */
1078 case XenbusStateClosing: 1081 case XenbusStateClosing:
1079 dev_warn(&xdev->dev, "backend going away!\n"); 1082 dev_warn(&xdev->dev, "backend going away!\n");
1080 pcifront_try_disconnect(pdev); 1083 pcifront_try_disconnect(pdev);