提交 e008b5fc 编写于 作者: E Eric W. Biederman 提交者: David S. Miller

net: Simplfy default_device_exit and improve batching.

- Defer dellink to net_cleanup() allowing for batching.
- Fix comment.
- Use for_each_netdev_safe again as dev_change_net_namespace touches
  at most one network device (unlike veth dellink).
Signed-off-by: NEric W. Biederman <ebiederm@xmission.com>
Signed-off-by: NDavid S. Miller <davem@davemloft.net>
上级 999b6d39
...@@ -5736,14 +5736,13 @@ static struct pernet_operations __net_initdata netdev_net_ops = { ...@@ -5736,14 +5736,13 @@ static struct pernet_operations __net_initdata netdev_net_ops = {
static void __net_exit default_device_exit(struct net *net) static void __net_exit default_device_exit(struct net *net)
{ {
struct net_device *dev; struct net_device *dev, *aux;
/* /*
* Push all migratable of the network devices back to the * Push all migratable network devices back to the
* initial network namespace * initial network namespace
*/ */
rtnl_lock(); rtnl_lock();
restart: for_each_netdev_safe(net, dev, aux) {
for_each_netdev(net, dev) {
int err; int err;
char fb_name[IFNAMSIZ]; char fb_name[IFNAMSIZ];
...@@ -5751,11 +5750,9 @@ static void __net_exit default_device_exit(struct net *net) ...@@ -5751,11 +5750,9 @@ static void __net_exit default_device_exit(struct net *net)
if (dev->features & NETIF_F_NETNS_LOCAL) if (dev->features & NETIF_F_NETNS_LOCAL)
continue; continue;
/* Delete virtual devices */ /* Leave virtual devices for the generic cleanup */
if (dev->rtnl_link_ops && dev->rtnl_link_ops->dellink) { if (dev->rtnl_link_ops)
dev->rtnl_link_ops->dellink(dev, NULL); continue;
goto restart;
}
/* Push remaing network devices to init_net */ /* Push remaing network devices to init_net */
snprintf(fb_name, IFNAMSIZ, "dev%d", dev->ifindex); snprintf(fb_name, IFNAMSIZ, "dev%d", dev->ifindex);
...@@ -5765,7 +5762,6 @@ static void __net_exit default_device_exit(struct net *net) ...@@ -5765,7 +5762,6 @@ static void __net_exit default_device_exit(struct net *net)
__func__, dev->name, err); __func__, dev->name, err);
BUG(); BUG();
} }
goto restart;
} }
rtnl_unlock(); rtnl_unlock();
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册