i40iw: Fix for LAN handler removal
If i40iw_open() fails for any reason, the LAN handler is not being removed. Modify i40iw_deinit_device() to always remove the handler. Signed-off-by: Mustafa Ismail <mustafa.ismail@intel.com> Signed-off-by: Henry Orosco <henry.orosco@intel.com> Signed-off-by: Doug Ledford <dledford@redhat.com>
This commit is contained in:

committed by
Doug Ledford

parent
01d0b36798
commit
c38d7e0d08
@@ -1422,12 +1422,11 @@ static enum i40iw_status_code i40iw_save_msix_info(struct i40iw_device *iwdev,
|
|||||||
* i40iw_deinit_device - clean up the device resources
|
* i40iw_deinit_device - clean up the device resources
|
||||||
* @iwdev: iwarp device
|
* @iwdev: iwarp device
|
||||||
* @reset: true if called before reset
|
* @reset: true if called before reset
|
||||||
* @del_hdl: true if delete hdl entry
|
|
||||||
*
|
*
|
||||||
* Destroy the ib device interface, remove the mac ip entry and ipv4/ipv6 addresses,
|
* Destroy the ib device interface, remove the mac ip entry and ipv4/ipv6 addresses,
|
||||||
* destroy the device queues and free the pble and the hmc objects
|
* destroy the device queues and free the pble and the hmc objects
|
||||||
*/
|
*/
|
||||||
static void i40iw_deinit_device(struct i40iw_device *iwdev, bool reset, bool del_hdl)
|
static void i40iw_deinit_device(struct i40iw_device *iwdev, bool reset)
|
||||||
{
|
{
|
||||||
struct i40e_info *ldev = iwdev->ldev;
|
struct i40e_info *ldev = iwdev->ldev;
|
||||||
|
|
||||||
@@ -1492,7 +1491,6 @@ static void i40iw_deinit_device(struct i40iw_device *iwdev, bool reset, bool del
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (del_hdl)
|
|
||||||
i40iw_del_handler(i40iw_find_i40e_handler(ldev));
|
i40iw_del_handler(i40iw_find_i40e_handler(ldev));
|
||||||
kfree(iwdev->hdl);
|
kfree(iwdev->hdl);
|
||||||
}
|
}
|
||||||
@@ -1658,7 +1656,7 @@ static int i40iw_open(struct i40e_info *ldev, struct i40e_client *client)
|
|||||||
} while (0);
|
} while (0);
|
||||||
|
|
||||||
i40iw_pr_err("status = %d last completion = %d\n", status, iwdev->init_state);
|
i40iw_pr_err("status = %d last completion = %d\n", status, iwdev->init_state);
|
||||||
i40iw_deinit_device(iwdev, false, false);
|
i40iw_deinit_device(iwdev, false);
|
||||||
return -ERESTART;
|
return -ERESTART;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1736,7 +1734,7 @@ static void i40iw_close(struct i40e_info *ldev, struct i40e_client *client, bool
|
|||||||
|
|
||||||
iwdev = &hdl->device;
|
iwdev = &hdl->device;
|
||||||
destroy_workqueue(iwdev->virtchnl_wq);
|
destroy_workqueue(iwdev->virtchnl_wq);
|
||||||
i40iw_deinit_device(iwdev, reset, true);
|
i40iw_deinit_device(iwdev, reset);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Reference in New Issue
Block a user