aboutsummaryrefslogtreecommitdiffstats
path: root/net/core/dev.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2008-12-30 20:39:37 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2008-12-30 20:39:37 -0500
commit5ed1836814d908f45cafde0e79cb85314ab9d41d (patch)
tree53db7ccf23c78d105b63adf4ee40a07068f0f856 /net/core/dev.c
parentab70537c32a3245325b48774664da588904e47f2 (diff)
parenteb4dea5853046727bfbb579f0c9a8cae7369f7c6 (diff)
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6: net: Fix percpu counters deadlock cpumask: prepare for iterators to only go to nr_cpu_ids/nr_cpumask_bits: net drivers/net/usb: use USB API functions rather than constants cls_cgroup: clean up Kconfig cls_cgroup: clean up for cgroup part cls_cgroup: fix an oops when removing a cgroup EtherExpress16: fix printing timed out status mlx4_en: Added "set_ringparam" Ethtool interface implementation mlx4_en: Always allocate RX ring for each interrupt vector mlx4_en: Verify number of RX rings doesn't exceed MAX_RX_RINGS IPVS: Make "no destination available" message more consistent between schedulers net: KS8695: removed duplicated #include tun: Fix SIOCSIFHWADDR error. smsc911x: compile fix re netif_rx signature changes netns: foreach_netdev_safe is insufficient in default_device_exit net: make xfrm_statistics_seq_show use generic snmp_fold_field net: Fix more NAPI interface netdev argument drop fallout. net: Fix unused variable warnings in pasemi_mac.c and spider_net.c
Diffstat (limited to 'net/core/dev.c')
-rw-r--r--net/core/dev.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/net/core/dev.c b/net/core/dev.c
index 446424027d24..09c66a449da6 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -5066,13 +5066,14 @@ static struct pernet_operations __net_initdata netdev_net_ops = {
5066 5066
5067static void __net_exit default_device_exit(struct net *net) 5067static void __net_exit default_device_exit(struct net *net)
5068{ 5068{
5069 struct net_device *dev, *next; 5069 struct net_device *dev;
5070 /* 5070 /*
5071 * Push all migratable of the network devices back to the 5071 * Push all migratable of the network devices back to the
5072 * initial network namespace 5072 * initial network namespace
5073 */ 5073 */
5074 rtnl_lock(); 5074 rtnl_lock();
5075 for_each_netdev_safe(net, dev, next) { 5075restart:
5076 for_each_netdev(net, dev) {
5076 int err; 5077 int err;
5077 char fb_name[IFNAMSIZ]; 5078 char fb_name[IFNAMSIZ];
5078 5079
@@ -5083,7 +5084,7 @@ static void __net_exit default_device_exit(struct net *net)
5083 /* Delete virtual devices */ 5084 /* Delete virtual devices */
5084 if (dev->rtnl_link_ops && dev->rtnl_link_ops->dellink) { 5085 if (dev->rtnl_link_ops && dev->rtnl_link_ops->dellink) {
5085 dev->rtnl_link_ops->dellink(dev); 5086 dev->rtnl_link_ops->dellink(dev);
5086 continue; 5087 goto restart;
5087 } 5088 }
5088 5089
5089 /* Push remaing network devices to init_net */ 5090 /* Push remaing network devices to init_net */
@@ -5094,6 +5095,7 @@ static void __net_exit default_device_exit(struct net *net)
5094 __func__, dev->name, err); 5095 __func__, dev->name, err);
5095 BUG(); 5096 BUG();
5096 } 5097 }
5098 goto restart;
5097 } 5099 }
5098 rtnl_unlock(); 5100 rtnl_unlock();
5099} 5101}