igb: use netif_carrier_off earlier when bringing if down
authorTodd Fujinaka <todd.fujinaka@intel.com>
Sat, 21 Mar 2015 00:41:53 +0000 (17:41 -0700)
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>
Sat, 21 Mar 2015 00:45:12 +0000 (17:45 -0700)
Use netif_carrier_off() first, since that will prevent the stack from
queuing more packets to this IF. This operation is fast, and should
behave much nicer when trying to bring down an interface under load.

Reported-by: Eliezer Tamir <eliezer.tamir@linux.intel.com>
Signed-off-by: Todd Fujinaka <todd.fujinaka@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
drivers/net/ethernet/intel/igb/igb_main.c

index f366b3b96d03db4cd54351bad599d425520d4df7..0e07545ccc97c9727486afe4b7f9f9520fdd7ff0 100644 (file)
@@ -1776,6 +1776,7 @@ void igb_down(struct igb_adapter *adapter)
        wr32(E1000_RCTL, rctl & ~E1000_RCTL_EN);
        /* flush and sleep below */
 
+       netif_carrier_off(netdev);
        netif_tx_stop_all_queues(netdev);
 
        /* disable transmits in the hardware */
@@ -1797,12 +1798,9 @@ void igb_down(struct igb_adapter *adapter)
                }
        }
 
-
        del_timer_sync(&adapter->watchdog_timer);
        del_timer_sync(&adapter->phy_info_timer);
 
-       netif_carrier_off(netdev);
-
        /* record the stats before reset*/
        spin_lock(&adapter->stats64_lock);
        igb_update_stats(adapter, &adapter->stats64);