• Krishna Kumar's avatar
    net: Handle NETREG_UNINITIALIZED devices correctly · e93737b0
    Krishna Kumar authored
    Fix two problems:
    1. If unregister_netdevice_many() is called with both registered
       and unregistered devices, rollback_registered_many() bails out
       when it reaches the first unregistered device. The processing
       of the prior registered devices is unfinished, and the
       remaining devices are skipped, and possible registered netdev's
       are leaked/unregistered.
    2. System hangs or panics depending on how the devices are passed,
       since when netdev_run_todo() runs, some devices were not fully
    Tested by passing intermingled unregistered and registered vlan
    devices to unregister_netdevice_many() as follows:
    	1. dev, fake_dev1, fake_dev2: hangs in run_todo
    	   ("unregister_netdevice: waiting for eth1.100 to become
    	    free. Usage count = 1")
    	2. fake_dev1, dev, fake_dev2: failure during de-registration
    	   and next registration, followed by a vlan driver Oops
    	   during subsequent registration.
    Confirmed that the patch fixes both cases.
    Signed-off-by: default avatarKrishna Kumar <krkumar2@in.ibm.com>
    Acked-by: default avatarEric Dumazet <eric.dumazet@gmail.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
dev.c 142 KB