ixgbe: reinit_locked() should be called with rtnl_lock
authorJohn Fastabend <john.r.fastabend@intel.com>
Thu, 16 Jan 2014 10:30:05 +0000 (02:30 -0800)
committerDavid S. Miller <davem@davemloft.net>
Thu, 16 Jan 2014 23:34:24 +0000 (15:34 -0800)
ixgbe_service_task() is calling ixgbe_reinit_locked() without
the rtnl_lock being held. This is because it is being called
from a worker thread and not a rtnl netlink or dcbnl path.

Add rtnl_{un}lock() semantics. I found this during code review.

Signed-off-by: John Fastabend <john.r.fastabend@intel.com>
Tested-by: Phil Schmitt <phillip.j.schmitt@intel.com>
Signed-off-by: Aaron Brown <aaron.f.brown@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c

index 3ca59d21d0b2ee9ccde0488b6c6547975bb6e07a..b445ad121de1f5daf8e5d275f423b378d1d54e57 100644 (file)
@@ -6392,7 +6392,9 @@ static void ixgbe_reset_subtask(struct ixgbe_adapter *adapter)
        netdev_err(adapter->netdev, "Reset adapter\n");
        adapter->tx_timeout_count++;
 
+       rtnl_lock();
        ixgbe_reinit_locked(adapter);
+       rtnl_unlock();
 }
 
 /**