mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	net: Teach vlans to cleanup as a pernet subsystem
Take advantage of the fact that an explicit rtnl_kill_links is unnecessary (and skipping it improves batching), as network namespace exit calls dellink on all remaining virtual devices, and rtnl_link_unregister calls dellink on all outstanding devices in that network namespace. To do this we need to leave the vlan proc directories in place until after network device exit time, which is done by using register_pernet_subsys instead of register_pernet_device. Signed-off-by: Eric W. Biederman <ebiederm@xmission.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
		
							parent
							
								
									650de8de16
								
							
						
					
					
						commit
						91e2ff3528
					
				
					 1 changed files with 3 additions and 5 deletions
				
			
		| 
						 | 
				
			
			@ -698,8 +698,6 @@ static int vlan_init_net(struct net *net)
 | 
			
		|||
 | 
			
		||||
static void vlan_exit_net(struct net *net)
 | 
			
		||||
{
 | 
			
		||||
	rtnl_kill_links(net, &vlan_link_ops);
 | 
			
		||||
 | 
			
		||||
	vlan_proc_cleanup(net);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -717,7 +715,7 @@ static int __init vlan_proto_init(void)
 | 
			
		|||
	pr_info("%s v%s %s\n", vlan_fullname, vlan_version, vlan_copyright);
 | 
			
		||||
	pr_info("All bugs added by %s\n", vlan_buggyright);
 | 
			
		||||
 | 
			
		||||
	err = register_pernet_device(&vlan_net_ops);
 | 
			
		||||
	err = register_pernet_subsys(&vlan_net_ops);
 | 
			
		||||
	if (err < 0)
 | 
			
		||||
		goto err0;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -742,7 +740,7 @@ static int __init vlan_proto_init(void)
 | 
			
		|||
err3:
 | 
			
		||||
	unregister_netdevice_notifier(&vlan_notifier_block);
 | 
			
		||||
err2:
 | 
			
		||||
	unregister_pernet_device(&vlan_net_ops);
 | 
			
		||||
	unregister_pernet_subsys(&vlan_net_ops);
 | 
			
		||||
err0:
 | 
			
		||||
	return err;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -762,7 +760,7 @@ static void __exit vlan_cleanup_module(void)
 | 
			
		|||
	for (i = 0; i < VLAN_GRP_HASH_SIZE; i++)
 | 
			
		||||
		BUG_ON(!hlist_empty(&vlan_group_hash[i]));
 | 
			
		||||
 | 
			
		||||
	unregister_pernet_device(&vlan_net_ops);
 | 
			
		||||
	unregister_pernet_subsys(&vlan_net_ops);
 | 
			
		||||
	rcu_barrier(); /* Wait for completion of call_rcu()'s */
 | 
			
		||||
 | 
			
		||||
	vlan_gvrp_uninit();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue