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: Eric W. Biederman <ebiederm@xmission.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Родитель
999b6d39ab
Коммит
e008b5fc8d
|
@ -5736,14 +5736,13 @@ static struct pernet_operations __net_initdata netdev_net_ops = {
|
|||
|
||||
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
|
||||
*/
|
||||
rtnl_lock();
|
||||
restart:
|
||||
for_each_netdev(net, dev) {
|
||||
for_each_netdev_safe(net, dev, aux) {
|
||||
int err;
|
||||
char fb_name[IFNAMSIZ];
|
||||
|
||||
|
@ -5751,11 +5750,9 @@ restart:
|
|||
if (dev->features & NETIF_F_NETNS_LOCAL)
|
||||
continue;
|
||||
|
||||
/* Delete virtual devices */
|
||||
if (dev->rtnl_link_ops && dev->rtnl_link_ops->dellink) {
|
||||
dev->rtnl_link_ops->dellink(dev, NULL);
|
||||
goto restart;
|
||||
}
|
||||
/* Leave virtual devices for the generic cleanup */
|
||||
if (dev->rtnl_link_ops)
|
||||
continue;
|
||||
|
||||
/* Push remaing network devices to init_net */
|
||||
snprintf(fb_name, IFNAMSIZ, "dev%d", dev->ifindex);
|
||||
|
@ -5765,7 +5762,6 @@ restart:
|
|||
__func__, dev->name, err);
|
||||
BUG();
|
||||
}
|
||||
goto restart;
|
||||
}
|
||||
rtnl_unlock();
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче