In case recovery was not successful, netdev still should be
present. But we should clear cdev if something bad happens
on recovery.

We also check cdev for null on dev close. That could be a case
if recovery was not successful.

Signed-off-by: Igor Russkikh <[email protected]>
Signed-off-by: Alexander Lobakin <[email protected]>
Signed-off-by: Michal Kalderon <[email protected]>
---
 drivers/net/ethernet/qlogic/qede/qede_main.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/qlogic/qede/qede_main.c 
b/drivers/net/ethernet/qlogic/qede/qede_main.c
index e6daf2d51533..99193a7f20c0 100644
--- a/drivers/net/ethernet/qlogic/qede/qede_main.c
+++ b/drivers/net/ethernet/qlogic/qede/qede_main.c
@@ -1238,7 +1238,10 @@ static int __qede_probe(struct pci_dev *pdev, u32 
dp_module, u8 dp_level,
 err4:
        qede_rdma_dev_remove(edev, (mode == QEDE_PROBE_RECOVERY));
 err3:
-       free_netdev(edev->ndev);
+       if (mode != QEDE_PROBE_RECOVERY)
+               free_netdev(edev->ndev);
+       else
+               edev->cdev = NULL;
 err2:
        qed_ops->common->slowpath_stop(cdev);
 err1:
@@ -2473,7 +2476,8 @@ static int qede_close(struct net_device *ndev)
 
        qede_unload(edev, QEDE_UNLOAD_NORMAL, false);
 
-       edev->ops->common->update_drv_state(edev->cdev, false);
+       if (edev->cdev)
+               edev->ops->common->update_drv_state(edev->cdev, false);
 
        return 0;
 }
-- 
2.17.1

Reply via email to