net: remove dev_base_lock from register_netdevice() and friends.
RTNL already protects writes to dev->reg_state, we no longer need to hold dev_base_lock to protect the readers. unlist_netdevice() second argument can be removed. Signed-off-by: Eric Dumazet <edumazet@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
2dd4d828d6
commit
e51b962438
@ -414,7 +414,7 @@ static void list_netdevice(struct net_device *dev)
|
||||
/* Device list removal
|
||||
* caller must respect a RCU grace period before freeing/reusing dev
|
||||
*/
|
||||
static void unlist_netdevice(struct net_device *dev, bool lock)
|
||||
static void unlist_netdevice(struct net_device *dev)
|
||||
{
|
||||
struct netdev_name_node *name_node;
|
||||
struct net *net = dev_net(dev);
|
||||
@ -427,13 +427,11 @@ static void unlist_netdevice(struct net_device *dev, bool lock)
|
||||
netdev_name_node_del(name_node);
|
||||
|
||||
/* Unlink dev from the device chain */
|
||||
if (lock)
|
||||
write_lock(&dev_base_lock);
|
||||
write_lock(&dev_base_lock);
|
||||
list_del_rcu(&dev->dev_list);
|
||||
netdev_name_node_del(dev->name_node);
|
||||
hlist_del_rcu(&dev->index_hlist);
|
||||
if (lock)
|
||||
write_unlock(&dev_base_lock);
|
||||
write_unlock(&dev_base_lock);
|
||||
|
||||
dev_base_seq_inc(dev_net(dev));
|
||||
}
|
||||
@ -10338,9 +10336,9 @@ int register_netdevice(struct net_device *dev)
|
||||
goto err_ifindex_release;
|
||||
|
||||
ret = netdev_register_kobject(dev);
|
||||
write_lock(&dev_base_lock);
|
||||
|
||||
WRITE_ONCE(dev->reg_state, ret ? NETREG_UNREGISTERED : NETREG_REGISTERED);
|
||||
write_unlock(&dev_base_lock);
|
||||
|
||||
if (ret)
|
||||
goto err_uninit_notify;
|
||||
|
||||
@ -10629,9 +10627,7 @@ void netdev_run_todo(void)
|
||||
continue;
|
||||
}
|
||||
|
||||
write_lock(&dev_base_lock);
|
||||
WRITE_ONCE(dev->reg_state, NETREG_UNREGISTERED);
|
||||
write_unlock(&dev_base_lock);
|
||||
linkwatch_sync_dev(dev);
|
||||
}
|
||||
|
||||
@ -11138,10 +11134,8 @@ void unregister_netdevice_many_notify(struct list_head *head,
|
||||
|
||||
list_for_each_entry(dev, head, unreg_list) {
|
||||
/* And unlink it from device chain. */
|
||||
write_lock(&dev_base_lock);
|
||||
unlist_netdevice(dev, false);
|
||||
unlist_netdevice(dev);
|
||||
WRITE_ONCE(dev->reg_state, NETREG_UNREGISTERING);
|
||||
write_unlock(&dev_base_lock);
|
||||
}
|
||||
flush_all_backlogs();
|
||||
|
||||
@ -11323,7 +11317,7 @@ int __dev_change_net_namespace(struct net_device *dev, struct net *net,
|
||||
dev_close(dev);
|
||||
|
||||
/* And unlink it from device chain */
|
||||
unlist_netdevice(dev, true);
|
||||
unlist_netdevice(dev);
|
||||
|
||||
synchronize_net();
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user