diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2008-12-30 20:39:37 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-12-30 20:39:37 -0500 |
commit | 5ed1836814d908f45cafde0e79cb85314ab9d41d (patch) | |
tree | 53db7ccf23c78d105b63adf4ee40a07068f0f856 /net/core/dev.c | |
parent | ab70537c32a3245325b48774664da588904e47f2 (diff) | |
parent | eb4dea5853046727bfbb579f0c9a8cae7369f7c6 (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.c | 8 |
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 | ||
5067 | static void __net_exit default_device_exit(struct net *net) | 5067 | static 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) { | 5075 | restart: |
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 | } |