From a83d13de6bf51aa1e86fa847f39ac0d4c1ca0041 Mon Sep 17 00:00:00 2001 From: t_jeang Date: Tue, 6 Jan 2009 12:06:02 +0000 Subject: [PATCH] imported patch disconnect-netback-on-close --- drivers/xen/netback/xenbus.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) 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; -- 2.39.5