mirror of
https://github.com/torvalds/linux.git
synced 2024-12-01 08:31:37 +00:00
net: get rid of rtnl_lock_unregistering()
After recent patches, and in particular commitsfaab39f63c
("net: allow out-of-order netdev unregistration") ande5f80fcf86
("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>
This commit is contained in:
parent
b3ae2d350d
commit
8a4fc54b07
@ -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) {
|
||||
|
Loading…
Reference in New Issue
Block a user