• David S. Miller's avatar
    net: Fix high overhead of vlan sub-device teardown. · 99c4a26a
    David S. Miller authored
    When a networking device is taken down that has a non-trivial number
    of VLAN devices configured under it, we eat a full synchronize_net()
    for every such VLAN device.
    
    This is because of the call chain:
    
    	NETDEV_DOWN notifier
    	--> vlan_device_event()
    		--> dev_change_flags()
    		--> __dev_change_flags()
    		--> __dev_close()
    		--> __dev_close_many()
    		--> dev_deactivate_many()
    			--> synchronize_net()
    
    This is kind of rediculous because we already have infrastructure for
    batching doing operation X to a list of net devices so that we only
    incur one sync.
    
    So make use of that by exporting dev_close_many() and adjusting it's
    interfaace so that the caller can fully manage the batch list.  Use
    this in vlan_device_event() and all the overhead goes away.
    Reported-by: default avatarSalam Noureddine <noureddine@arista.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    99c4a26a
vlan.c 16.6 KB