Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 172125
b: refs/heads/master
c: 04dc7f6
h: refs/heads/master
i:
  172123: 2f148e1
v: v3
  • Loading branch information
Eric W. Biederman authored and David S. Miller committed Dec 3, 2009
1 parent 571ba66 commit 54b4410
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 25 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 72ad937abd0a43b7cf2c557ba1f2ec75e608c516
refs/heads/master: 04dc7f6be3a7b308f8545bb45772c9fb75f71aca
25 changes: 25 additions & 0 deletions trunk/net/core/dev.c
Original file line number Diff line number Diff line change
Expand Up @@ -5766,8 +5766,33 @@ static void __net_exit default_device_exit(struct net *net)
rtnl_unlock();
}

static void __net_exit default_device_exit_batch(struct list_head *net_list)
{
/* At exit all network devices most be removed from a network
* namespace. Do this in the reverse order of registeration.
* Do this across as many network namespaces as possible to
* improve batching efficiency.
*/
struct net_device *dev;
struct net *net;
LIST_HEAD(dev_kill_list);

rtnl_lock();
list_for_each_entry(net, net_list, exit_list) {
for_each_netdev_reverse(net, dev) {
if (dev->rtnl_link_ops)
dev->rtnl_link_ops->dellink(dev, &dev_kill_list);
else
unregister_netdevice_queue(dev, &dev_kill_list);
}
}
unregister_netdevice_many(&dev_kill_list);
rtnl_unlock();
}

static struct pernet_operations __net_initdata default_device_ops = {
.exit = default_device_exit,
.exit_batch = default_device_exit_batch,
};

/*
Expand Down
24 changes: 0 additions & 24 deletions trunk/net/core/net_namespace.c
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,8 @@
#include <linux/idr.h>
#include <linux/rculist.h>
#include <linux/nsproxy.h>
#include <linux/netdevice.h>
#include <net/net_namespace.h>
#include <net/netns/generic.h>
#include <net/rtnetlink.h>

/*
* Our network namespace constructor/destructor lists
Expand All @@ -29,20 +27,6 @@ EXPORT_SYMBOL(init_net);

#define INITIAL_NET_GEN_PTRS 13 /* +1 for len +2 for rcu_head */

static void unregister_netdevices(struct net *net, struct list_head *list)
{
struct net_device *dev;
/* At exit all network devices most be removed from a network
* namespace. Do this in the reverse order of registeration.
*/
for_each_netdev_reverse(net, dev) {
if (dev->rtnl_link_ops)
dev->rtnl_link_ops->dellink(dev, list);
else
unregister_netdevice_queue(dev, list);
}
}

static int ops_init(const struct pernet_operations *ops, struct net *net)
{
int err;
Expand Down Expand Up @@ -78,14 +62,6 @@ static void ops_exit_list(const struct pernet_operations *ops,
list_for_each_entry(net, net_exit_list, exit_list)
ops->exit(net);
}
if (&ops->list == first_device) {
LIST_HEAD(dev_kill_list);
rtnl_lock();
list_for_each_entry(net, net_exit_list, exit_list)
unregister_netdevices(net, &dev_kill_list);
unregister_netdevice_many(&dev_kill_list);
rtnl_unlock();
}
if (ops->exit_batch)
ops->exit_batch(net_exit_list);
}
Expand Down

0 comments on commit 54b4410

Please sign in to comment.