qlcnic_attach_func requires rtnl_lock to be held.

Cc: dept-gelinuxnic...@qlogic.com
Signed-off-by: Hannes Frederic Sowa <han...@stressinduktion.org>
---
 drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c 
b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c
index 1205f6f9c94173..1c29105b6c364f 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c
@@ -3952,8 +3952,14 @@ static pci_ers_result_t 
qlcnic_82xx_io_error_detected(struct pci_dev *pdev,
 
 static pci_ers_result_t qlcnic_82xx_io_slot_reset(struct pci_dev *pdev)
 {
-       return qlcnic_attach_func(pdev) ? PCI_ERS_RESULT_DISCONNECT :
-                               PCI_ERS_RESULT_RECOVERED;
+       pci_ers_result_t res;
+
+       rtnl_lock();
+       res = qlcnic_attach_func(pdev) ? PCI_ERS_RESULT_DISCONNECT :
+                                        PCI_ERS_RESULT_RECOVERED;
+       rtnl_unlock();
+
+       return res;
 }
 
 static void qlcnic_82xx_io_resume(struct pci_dev *pdev)
-- 
2.5.5

Reply via email to