e1000: call netif_carrier_off early on down
authorEliezer Tamir <eliezer.tamir@linux.intel.com>
Wed, 25 Feb 2015 15:52:49 +0000 (15:52 +0000)
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>
Fri, 6 Mar 2015 10:47:10 +0000 (02:47 -0800)
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 <eliezer.tamir@linux.intel.com>
Tested-by: Aaron Brown <aaron.f.brown@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
drivers/net/ethernet/intel/e1000/e1000_main.c

index 7f997d36948f3e59621b3698b1a43b36166ecf93..26dcb44ea0c81b920b08d9ee287afd8be76636e4 100644 (file)
@@ -516,6 +516,7 @@ void e1000_down(struct e1000_adapter *adapter)
        struct net_device *netdev = adapter->netdev;
        u32 rctl, tctl;
 
+       netif_carrier_off(netdev);
 
        /* disable receives in the hardware */
        rctl = er32(RCTL);
@@ -544,7 +545,6 @@ void e1000_down(struct e1000_adapter *adapter)
 
        adapter->link_speed = 0;
        adapter->link_duplex = 0;
-       netif_carrier_off(netdev);
 
        e1000_reset(adapter);
        e1000_clean_all_tx_rings(adapter);