dev: Hold per-netns RTNL in (un)?register_netdev().
Let's hold per-netns RTNL of dev_net(dev) in register_netdev() and unregister_netdev(). Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com> Reviewed-by: Eric Dumazet <edumazet@google.com> Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
parent
7bd72a4aa2
commit
00fb982393
1 changed files with 10 additions and 4 deletions
|
@ -10731,12 +10731,16 @@ EXPORT_SYMBOL_GPL(init_dummy_netdev);
|
|||
*/
|
||||
int register_netdev(struct net_device *dev)
|
||||
{
|
||||
struct net *net = dev_net(dev);
|
||||
int err;
|
||||
|
||||
if (rtnl_lock_killable())
|
||||
if (rtnl_net_lock_killable(net))
|
||||
return -EINTR;
|
||||
|
||||
err = register_netdevice(dev);
|
||||
rtnl_unlock();
|
||||
|
||||
rtnl_net_unlock(net);
|
||||
|
||||
return err;
|
||||
}
|
||||
EXPORT_SYMBOL(register_netdev);
|
||||
|
@ -11606,9 +11610,11 @@ EXPORT_SYMBOL(unregister_netdevice_many);
|
|||
*/
|
||||
void unregister_netdev(struct net_device *dev)
|
||||
{
|
||||
rtnl_lock();
|
||||
struct net *net = dev_net(dev);
|
||||
|
||||
rtnl_net_lock(net);
|
||||
unregister_netdevice(dev);
|
||||
rtnl_unlock();
|
||||
rtnl_net_unlock(net);
|
||||
}
|
||||
EXPORT_SYMBOL(unregister_netdev);
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue