ixgbe: fix race condition with shutdown
authorDon Skidmore <donald.c.skidmore@intel.com>
Sat, 17 Mar 2012 05:51:52 +0000 (05:51 +0000)
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>
Thu, 3 May 2012 10:02:43 +0000 (03:02 -0700)
It was possible for shutdown to pull the rug out from other driver entry
points.  Now we just grab the rtnl lock before taking everything apart.
Thanks to Hariharan for noticing this tight race condition.

Signed-off-by: Don Skidmore <donald.c.skidmore@intel.com>
Cc: Hariharan Nagarajan <hanagara@cisco.com>
Tested-by: Phil Schmitt <phillip.j.schmitt@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c

index 88f6b2e9b72db2ddb22b917fcb4e4ae4c9b99514..d9dbf871abb8cd3e1b2acdabcbd20334c6478d7a 100644 (file)
@@ -4866,10 +4866,12 @@ static int __ixgbe_shutdown(struct pci_dev *pdev, bool *enable_wake)
        netif_device_detach(netdev);
 
        if (netif_running(netdev)) {
+               rtnl_lock();
                ixgbe_down(adapter);
                ixgbe_free_irq(adapter);
                ixgbe_free_all_tx_resources(adapter);
                ixgbe_free_all_rx_resources(adapter);
+               rtnl_unlock();
        }
 
        ixgbe_clear_interrupt_scheme(adapter);