}
+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.
*/
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;
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;