diff options
author | Eric Dumazet <edumazet@google.com> | 2022-02-18 20:58:56 +0300 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2022-02-19 19:24:03 +0300 |
commit | 8a4fc54b07d756f1884af6c47ec84dfa3da663df (patch) | |
tree | bc3ed593f88b94bbb0b210d2ab8ab00a95b2a07f /net/core/dev.c | |
parent | b3ae2d350ddfd5aeb04de29c333d6639aeb1dae2 (diff) | |
download | linux-8a4fc54b07d756f1884af6c47ec84dfa3da663df.tar.xz |
net: get rid of rtnl_lock_unregistering()
After recent patches, and in particular commits
faab39f63c1f ("net: allow out-of-order netdev unregistration") and
e5f80fcf869a ("ipv6: give an IPv6 dev to blackhole_netdev")
we no longer need the barrier implemented in rtnl_lock_unregistering().
Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/core/dev.c')
-rw-r--r-- | net/core/dev.c | 42 |
1 files changed, 0 insertions, 42 deletions
diff --git a/net/core/dev.c b/net/core/dev.c index acd884910e12..a1190291c48e 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -10884,36 +10884,6 @@ static void __net_exit default_device_exit_net(struct net *net) } } -static void __net_exit rtnl_lock_unregistering(struct list_head *net_list) -{ - /* Return (with the rtnl_lock held) when there are no network - * devices unregistering in any network namespace in net_list. - */ - DEFINE_WAIT_FUNC(wait, woken_wake_function); - bool unregistering; - struct net *net; - - ASSERT_RTNL(); - add_wait_queue(&netdev_unregistering_wq, &wait); - for (;;) { - unregistering = false; - - list_for_each_entry(net, net_list, exit_list) { - if (atomic_read(&net->dev_unreg_count) > 0) { - unregistering = true; - break; - } - } - if (!unregistering) - break; - __rtnl_unlock(); - - wait_woken(&wait, TASK_UNINTERRUPTIBLE, MAX_SCHEDULE_TIMEOUT); - rtnl_lock(); - } - remove_wait_queue(&netdev_unregistering_wq, &wait); -} - static void __net_exit default_device_exit_batch(struct list_head *net_list) { /* At exit all network devices most be removed from a network @@ -10930,18 +10900,6 @@ static void __net_exit default_device_exit_batch(struct list_head *net_list) default_device_exit_net(net); cond_resched(); } - /* To prevent network device cleanup code from dereferencing - * loopback devices or network devices that have been freed - * wait here for all pending unregistrations to complete, - * before unregistring the loopback device and allowing the - * network namespace be freed. - * - * The netdev todo list containing all network devices - * unregistrations that happen in default_device_exit_batch - * will run in the rtnl_unlock() at the end of - * default_device_exit_batch. - */ - rtnl_lock_unregistering(net_list); list_for_each_entry(net, net_list, exit_list) { for_each_netdev_reverse(net, dev) { |