From 4d96df89baa106e9a7f8cb79fa5db0a650f18f79 Mon Sep 17 00:00:00 2001 From: Keir Fraser Date: Fri, 10 Dec 2010 10:48:31 +0000 Subject: [PATCH] xen/netloop: make netloop permanent with reference to RH BZ#567540 [0], this patch makes the netloop module permanent (like netback is currently). It reverts parts of xen-unstable c/s 9019:271cb04a4f2b [1] [2] (though that has a typo: "__init clean_loopback", so it was probably changed later too). The patch fixes the problem of "rmmod netloop" hanging, resulting in blocked tasks and inability to shut down cleanly: ... kernel: unregister_netdevice: waiting for veth4 to become free. Usage count = 1 The problem was also reported for Debian [3] and on the Fedora-xen mailing list [4]. [0] https://bugzilla.redhat.com/show_bug.cgi?id=567540 [1] http://lists.xensource.com/archives/html/xen-devel/2006-02/msg01033.html [2] http://xenbits.xensource.com/xen-unstable.hg?rev/271cb04a4f2b [3] http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=425703 [4] http://www.redhat.com/archives/fedora-xen/2007-April/msg00074.html From: Laszlo Ersek Signed-off-by: Keir Fraser --- drivers/xen/netback/loopback.c | 27 --------------------------- 1 file changed, 27 deletions(-) diff --git a/drivers/xen/netback/loopback.c b/drivers/xen/netback/loopback.c index 9d1839ab..239ac128 100644 --- a/drivers/xen/netback/loopback.c +++ b/drivers/xen/netback/loopback.c @@ -290,23 +290,6 @@ static int __init make_loopback(int i) return err; } -static void __exit clean_loopback(int i) -{ - struct net_device *dev1, *dev2; - char dev_name[IFNAMSIZ]; - - sprintf(dev_name, "vif0.%d", i); - dev1 = dev_get_by_name(dev_name); - sprintf(dev_name, "veth%d", i); - dev2 = dev_get_by_name(dev_name); - if (dev1 && dev2) { - unregister_netdev(dev2); - unregister_netdev(dev1); - free_netdev(dev2); - free_netdev(dev1); - } -} - static int __init loopback_init(void) { int i, err = 0; @@ -323,14 +306,4 @@ static int __init loopback_init(void) module_init(loopback_init); -static void __exit loopback_exit(void) -{ - int i; - - for (i = nloopbacks; i-- > 0; ) - clean_loopback(i); -} - -module_exit(loopback_exit); - MODULE_LICENSE("Dual BSD/GPL"); -- 2.39.5