scsi: lpfc: Fix reset recovery paths that are not recovering
A recent patch unconditionally marks the hba as in error as part of resetting the adapter. The driver flow that called the adapter reset was a recovery path, which expects the adapter to not be in an error state in order to finish the recovery. Given the new error state being set, the recovery fails and the adapter is left in limbo. Revise the adapter reset routine so that it will only mark the adapter in error if it was unable to reset the adapter. Fixes: 8c24a4f643ed ("scsi: lpfc: Fix crash due to port reset racing vs adapter error handling") Link: https://lore.kernel.org/r/20190903215441.10490-1-jsmart2021@gmail.com Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com> Signed-off-by: James Smart <jsmart2021@gmail.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
2d44d165e9
commit
4fb86a6bc5
@ -4619,8 +4619,10 @@ lpfc_sli_brdrestart_s4(struct lpfc_hba *phba)
|
||||
hba_aer_enabled = phba->hba_flag & HBA_AER_ENABLED;
|
||||
|
||||
rc = lpfc_sli4_brdreset(phba);
|
||||
if (rc)
|
||||
goto error;
|
||||
if (rc) {
|
||||
phba->link_state = LPFC_HBA_ERROR;
|
||||
goto hba_down_queue;
|
||||
}
|
||||
|
||||
spin_lock_irq(&phba->hbalock);
|
||||
phba->pport->stopped = 0;
|
||||
@ -4635,8 +4637,7 @@ lpfc_sli_brdrestart_s4(struct lpfc_hba *phba)
|
||||
if (hba_aer_enabled)
|
||||
pci_disable_pcie_error_reporting(phba->pcidev);
|
||||
|
||||
error:
|
||||
phba->link_state = LPFC_HBA_ERROR;
|
||||
hba_down_queue:
|
||||
lpfc_hba_down_post(phba);
|
||||
lpfc_sli4_queue_destroy(phba);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user