瀏覽代碼

xen-netfront: handle backend CLOSED without CLOSING

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: David S. Miller <davem@davemloft.net>
David Vrabel 11 年之前
父節點
當前提交
bce3ea81d5
共有 1 個文件被更改,包括 4 次插入1 次删除
  1. 4 1
      drivers/net/xen-netfront.c

+ 4 - 1
drivers/net/xen-netfront.c

@@ -1832,7 +1832,6 @@ static void netback_changed(struct xenbus_device *dev,
 	case XenbusStateReconfiguring:
 	case XenbusStateReconfiguring:
 	case XenbusStateReconfigured:
 	case XenbusStateReconfigured:
 	case XenbusStateUnknown:
 	case XenbusStateUnknown:
-	case XenbusStateClosed:
 		break;
 		break;
 
 
 	case XenbusStateInitWait:
 	case XenbusStateInitWait:
@@ -1847,6 +1846,10 @@ static void netback_changed(struct xenbus_device *dev,
 		netdev_notify_peers(netdev);
 		netdev_notify_peers(netdev);
 		break;
 		break;
 
 
+	case XenbusStateClosed:
+		if (dev->state == XenbusStateClosed)
+			break;
+		/* Missed the backend's CLOSING state -- fallthrough */
 	case XenbusStateClosing:
 	case XenbusStateClosing:
 		xenbus_frontend_closed(dev);
 		xenbus_frontend_closed(dev);
 		break;
 		break;