scsi: qla2xxx: Set remove flag for all VP
During driver unload, the remove flag will be set for all scsi_qla_host/NPIV. This allows each NPIV to see the flag instead of reaching for base_vha to search for it. Link: https://lore.kernel.org/r/20190912180918.6436-11-hmadhani@marvell.com Signed-off-by: Quinn Tran <qutran@marvell.com> Signed-off-by: Himanshu Madhani <hmadhani@marvell.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
c76ae845ea
commit
6997db98d0
|
@ -3486,6 +3486,29 @@ disable_device:
|
|||
return ret;
|
||||
}
|
||||
|
||||
static void __qla_set_remove_flag(scsi_qla_host_t *base_vha)
|
||||
{
|
||||
scsi_qla_host_t *vp;
|
||||
unsigned long flags;
|
||||
struct qla_hw_data *ha;
|
||||
|
||||
if (!base_vha)
|
||||
return;
|
||||
|
||||
ha = base_vha->hw;
|
||||
|
||||
spin_lock_irqsave(&ha->vport_slock, flags);
|
||||
list_for_each_entry(vp, &ha->vp_list, list)
|
||||
set_bit(PFLG_DRIVER_REMOVING, &vp->pci_flags);
|
||||
|
||||
/*
|
||||
* Indicate device removal to prevent future board_disable
|
||||
* and wait until any pending board_disable has completed.
|
||||
*/
|
||||
set_bit(PFLG_DRIVER_REMOVING, &base_vha->pci_flags);
|
||||
spin_unlock_irqrestore(&ha->vport_slock, flags);
|
||||
}
|
||||
|
||||
static void
|
||||
qla2x00_shutdown(struct pci_dev *pdev)
|
||||
{
|
||||
|
@ -3502,7 +3525,7 @@ qla2x00_shutdown(struct pci_dev *pdev)
|
|||
* Prevent future board_disable and wait
|
||||
* until any pending board_disable has completed.
|
||||
*/
|
||||
set_bit(PFLG_DRIVER_REMOVING, &vha->pci_flags);
|
||||
__qla_set_remove_flag(vha);
|
||||
cancel_work_sync(&ha->board_disable);
|
||||
|
||||
if (!atomic_read(&pdev->enable_cnt))
|
||||
|
@ -3658,10 +3681,7 @@ qla2x00_remove_one(struct pci_dev *pdev)
|
|||
ha = base_vha->hw;
|
||||
ql_log(ql_log_info, base_vha, 0xb079,
|
||||
"Removing driver\n");
|
||||
|
||||
/* Indicate device removal to prevent future board_disable and wait
|
||||
* until any pending board_disable has completed. */
|
||||
set_bit(PFLG_DRIVER_REMOVING, &base_vha->pci_flags);
|
||||
__qla_set_remove_flag(base_vha);
|
||||
cancel_work_sync(&ha->board_disable);
|
||||
|
||||
/*
|
||||
|
|
Loading…
Reference in New Issue