diff options
author | Eric W. Biederman <ebiederm@xmission.com> | 2009-12-02 21:29:04 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2009-12-03 15:22:02 -0500 |
commit | 04dc7f6be3a7b308f8545bb45772c9fb75f71aca (patch) | |
tree | 11cfe976f4adffdbdeeed71f591613089e9d6fe5 /net/core/dev.c | |
parent | 72ad937abd0a43b7cf2c557ba1f2ec75e608c516 (diff) |
net: Move network device exit batching
Move network device exit batching from a special case in
net_namespace.c to using common mechanisms in dev.c
Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/core/dev.c')
-rw-r--r-- | net/core/dev.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/net/core/dev.c b/net/core/dev.c index e3e18dee0bd..0913a08a87d 100644 --- a/net/core/dev.c +++ b/net/core/dev.c | |||
@@ -5766,8 +5766,33 @@ static void __net_exit default_device_exit(struct net *net) | |||
5766 | rtnl_unlock(); | 5766 | rtnl_unlock(); |
5767 | } | 5767 | } |
5768 | 5768 | ||
5769 | static void __net_exit default_device_exit_batch(struct list_head *net_list) | ||
5770 | { | ||
5771 | /* At exit all network devices most be removed from a network | ||
5772 | * namespace. Do this in the reverse order of registeration. | ||
5773 | * Do this across as many network namespaces as possible to | ||
5774 | * improve batching efficiency. | ||
5775 | */ | ||
5776 | struct net_device *dev; | ||
5777 | struct net *net; | ||
5778 | LIST_HEAD(dev_kill_list); | ||
5779 | |||
5780 | rtnl_lock(); | ||
5781 | list_for_each_entry(net, net_list, exit_list) { | ||
5782 | for_each_netdev_reverse(net, dev) { | ||
5783 | if (dev->rtnl_link_ops) | ||
5784 | dev->rtnl_link_ops->dellink(dev, &dev_kill_list); | ||
5785 | else | ||
5786 | unregister_netdevice_queue(dev, &dev_kill_list); | ||
5787 | } | ||
5788 | } | ||
5789 | unregister_netdevice_many(&dev_kill_list); | ||
5790 | rtnl_unlock(); | ||
5791 | } | ||
5792 | |||
5769 | static struct pernet_operations __net_initdata default_device_ops = { | 5793 | static struct pernet_operations __net_initdata default_device_ops = { |
5770 | .exit = default_device_exit, | 5794 | .exit = default_device_exit, |
5795 | .exit_batch = default_device_exit_batch, | ||
5771 | }; | 5796 | }; |
5772 | 5797 | ||
5773 | /* | 5798 | /* |