]> xenbits.xensource.com Git - people/ssmith/nc2-2.6.27.bak/.git/commitdiff
patch disconnect-netback-on-close
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/netback/xenbus.c

index 30d43f4fb93756e80c62004dba584a779ad9884b..05af01bb5bac0d190cfb22430998da3194ead53c 100644 (file)
@@ -220,6 +220,16 @@ static void backend_create_netif(struct backend_info *be)
 }
 
 
+static void disconnect_backend(struct xenbus_device *dev)
+{
+       struct backend_info *be = dev->dev.driver_data;
+
+       if (be->netif) {
+               netif_disconnect(be->netif);
+               be->netif = NULL;
+       }
+}
+
 /**
  * Callback received when the frontend's state changes.
  */
@@ -237,6 +247,7 @@ static void frontend_changed(struct xenbus_device *dev,
                if (dev->state == XenbusStateClosed) {
                        printk(KERN_INFO "%s: %s: prepare for reconnect\n",
                               __FUNCTION__, dev->nodename);
+                       disconnect_backend(dev);
                        xenbus_switch_state(dev, XenbusStateInitWait);
                }
                break;
@@ -253,11 +264,9 @@ static void frontend_changed(struct xenbus_device *dev,
                break;
 
        case XenbusStateClosing:
-               if (be->netif) {
+               if (be->netif)
                        kobject_uevent(&dev->dev.kobj, KOBJ_OFFLINE);
-                       netif_disconnect(be->netif);
-                       be->netif = NULL;
-               }
+               disconnect_backend(dev);
                xenbus_switch_state(dev, XenbusStateClosing);
                break;