forked from mirrors/linux
		
	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)
 | 
					int register_netdev(struct net_device *dev)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
						struct net *net = dev_net(dev);
 | 
				
			||||||
	int err;
 | 
						int err;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (rtnl_lock_killable())
 | 
						if (rtnl_net_lock_killable(net))
 | 
				
			||||||
		return -EINTR;
 | 
							return -EINTR;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	err = register_netdevice(dev);
 | 
						err = register_netdevice(dev);
 | 
				
			||||||
	rtnl_unlock();
 | 
					
 | 
				
			||||||
 | 
						rtnl_net_unlock(net);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return err;
 | 
						return err;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
EXPORT_SYMBOL(register_netdev);
 | 
					EXPORT_SYMBOL(register_netdev);
 | 
				
			||||||
| 
						 | 
					@ -11606,9 +11610,11 @@ EXPORT_SYMBOL(unregister_netdevice_many);
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
void unregister_netdev(struct net_device *dev)
 | 
					void unregister_netdev(struct net_device *dev)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	rtnl_lock();
 | 
						struct net *net = dev_net(dev);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						rtnl_net_lock(net);
 | 
				
			||||||
	unregister_netdevice(dev);
 | 
						unregister_netdevice(dev);
 | 
				
			||||||
	rtnl_unlock();
 | 
						rtnl_net_unlock(net);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
EXPORT_SYMBOL(unregister_netdev);
 | 
					EXPORT_SYMBOL(unregister_netdev);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue