e1000e: call netif_carrier_off early on down
authorEliezer Tamir <[email protected]>
Sat, 21 Mar 2015 00:41:52 +0000 (17:41 -0700)
committerJeff Kirsher <[email protected]>
Sat, 21 Mar 2015 00:42:43 +0000 (17:42 -0700)
When bringing down an interface netif_carrier_off() should be
one the first things we do, since this will prevent the stack
from queuing more packets to this interface.
This operation is very fast, and should make the device behave
much nicer when trying to bring down an interface under load.

Also, this would Do The Right Thing (TM) if this device has some
sort of fail-over teaming and redirect traffic to the other IF.

Move netif_carrier_off as early as possible.

Signed-off-by: Eliezer Tamir <[email protected]>
Tested-by: Aaron Brown <[email protected]>
Signed-off-by: Jeff Kirsher <[email protected]>
drivers/net/ethernet/intel/e1000e/netdev.c

index 4be4576d71aaa47fa0955257ab4e6d6cacdc1607..8c95fb84226f48186cede878ba679053a752ae32 100644 (file)
@@ -4084,6 +4084,8 @@ void e1000e_down(struct e1000_adapter *adapter, bool reset)
         */
        set_bit(__E1000_DOWN, &adapter->state);
 
+       netif_carrier_off(netdev);
+
        /* disable receives in the hardware */
        rctl = er32(RCTL);
        if (!(adapter->flags2 & FLAG2_NO_DISABLE_RX))
@@ -4108,8 +4110,6 @@ void e1000e_down(struct e1000_adapter *adapter, bool reset)
        del_timer_sync(&adapter->watchdog_timer);
        del_timer_sync(&adapter->phy_info_timer);
 
-       netif_carrier_off(netdev);
-
        spin_lock(&adapter->stats64_lock);
        e1000e_update_stats(adapter);
        spin_unlock(&adapter->stats64_lock);