ixgbe: fix possible race in reset subtask
Similar to ixgbevf, the same possibility for race exists. Extend the RTNL lock in ixgbe_reset_subtask() to protect the state bits; this is to make sure that we get the most up-to-date values for the bits and avoid a possible race when going down. Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com> Tested-by: Andrew Bowers <andrewx.bowers@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
This commit is contained in:
parent
cc5b114dcf
commit
88adce4ea8
1 changed files with 4 additions and 2 deletions
|
@ -7621,17 +7621,19 @@ static void ixgbe_reset_subtask(struct ixgbe_adapter *adapter)
|
||||||
if (!test_and_clear_bit(__IXGBE_RESET_REQUESTED, &adapter->state))
|
if (!test_and_clear_bit(__IXGBE_RESET_REQUESTED, &adapter->state))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
rtnl_lock();
|
||||||
/* If we're already down, removing or resetting, just bail */
|
/* If we're already down, removing or resetting, just bail */
|
||||||
if (test_bit(__IXGBE_DOWN, &adapter->state) ||
|
if (test_bit(__IXGBE_DOWN, &adapter->state) ||
|
||||||
test_bit(__IXGBE_REMOVING, &adapter->state) ||
|
test_bit(__IXGBE_REMOVING, &adapter->state) ||
|
||||||
test_bit(__IXGBE_RESETTING, &adapter->state))
|
test_bit(__IXGBE_RESETTING, &adapter->state)) {
|
||||||
|
rtnl_unlock();
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
ixgbe_dump(adapter);
|
ixgbe_dump(adapter);
|
||||||
netdev_err(adapter->netdev, "Reset adapter\n");
|
netdev_err(adapter->netdev, "Reset adapter\n");
|
||||||
adapter->tx_timeout_count++;
|
adapter->tx_timeout_count++;
|
||||||
|
|
||||||
rtnl_lock();
|
|
||||||
ixgbe_reinit_locked(adapter);
|
ixgbe_reinit_locked(adapter);
|
||||||
rtnl_unlock();
|
rtnl_unlock();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue