From: t_jeang Date: Tue, 6 Jan 2009 12:06:02 +0000 (+0000) Subject: imported patch disconnect-netback-on-close X-Git-Tag: netback-tcp-and-ip-in-different-fragments X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=a83d13de6bf51aa1e86fa847f39ac0d4c1ca0041;p=xenclient%2Fkernel.git imported patch disconnect-netback-on-close --- diff --git a/drivers/xen/netback/xenbus.c b/drivers/xen/netback/xenbus.c index 774da6df..668fecf1 100644 --- a/drivers/xen/netback/xenbus.c +++ b/drivers/xen/netback/xenbus.c @@ -225,6 +225,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. */ @@ -242,6 +252,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; @@ -258,11 +269,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;