[PATCH 06/42] lpfc: Fix leak of ELS completions on adapter reset

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



If the adapter is reset while there are outstanding ELS's,
subsequent reinitialization of the adapter will fail as it has
not recovered all of the io contexts relative to the ELS's.

If an ELS timed out or otherwise failed and an the ELS was
attempted to be aborted (which changes the ELS completion context),
in causes where the driver generates completions for the outstanding
IO as the adapter would not due to being reset, the driver released
only the ELS context and failed to release the abort context.
When the adapter went to reinit, as it had not received all of the
contexts, it failed to reinit.

Fix by having the ELS completion handler identify the
driver-generated completion status and release the abort context.

Signed-off-by: Dick Kennedy <dick.kennedy@xxxxxxxxxxxx>
Signed-off-by: James Smart <jsmart2021@xxxxxxxxx>
---
 drivers/scsi/lpfc/lpfc_sli.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/scsi/lpfc/lpfc_sli.c b/drivers/scsi/lpfc/lpfc_sli.c
index 504f56a99b20..3e128ea01dc0 100644
--- a/drivers/scsi/lpfc/lpfc_sli.c
+++ b/drivers/scsi/lpfc/lpfc_sli.c
@@ -11097,6 +11097,9 @@ lpfc_sli_abort_els_cmpl(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb,
 				irsp->ulpStatus, irsp->un.ulpWord[4]);
 
 		spin_unlock_irq(&phba->hbalock);
+		if (irsp->ulpStatus == IOSTAT_LOCAL_REJECT &&
+		    irsp->un.ulpWord[4] == IOERR_SLI_ABORTED)
+			lpfc_sli_release_iocbq(phba, abort_iocb);
 	}
 release_iocb:
 	lpfc_sli_release_iocbq(phba, cmdiocb);
-- 
2.13.7




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]

  Powered by Linux