OpenCloudOS-Kernel/drivers/scsi/lpfc
James Smart 9ec58ec7d4 scsi: lpfc: Fix NVMe recovery after mailbox timeout
If a mailbox command times out, the SLI port is deemed in error and the
port is reset.  The HBA cleanup is not returning I/Os to the NVMe layer
before the port is unregistered. This is due to the HBA being marked
offline (!SLI_ACTIVE) and cleanup being done by the mailbox timeout handler
rather than an general adapter reset routine.  The mailbox timeout handler
mailbox handler only cleaned up SCSI I/Os.

Fix by reworking the mailbox handler to:

 - After handling the mailbox error, detect the board is already in
   failure (may be due to another error), and leave cleanup to the
   other handler.

 - If the mailbox command timeout is initial detector of the port error,
   continue with the board cleanup and marking the adapter offline
   (!SLI_ACTIVE). Remove the SCSI-only I/O cleanup routine. The generic
   reset adapter routine that is subsequently invoked, will clean up the
   I/Os.

 - Have the reset adapter routine flush all NVMe and SCSI I/Os if the
   adapter has been marked failed (!SLI_ACTIVE).

 - Rework the NVMe I/O terminate routine to take a status code to fail the
   I/O with and update so that cleaned up I/O calls the wqe completion
   routine. Currently it is bypassing the wqe cleanup and calling the NVMe
   I/O completion directly. The wqe completion routine will take care of
   data structure and node cleanup then call the NVMe I/O completion
   handler.

Link: https://lore.kernel.org/r/20210104180240.46824-11-jsmart2021@gmail.com
Co-developed-by: Dick Kennedy <dick.kennedy@broadcom.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>
2021-01-07 23:02:36 -05:00
..
Makefile scsi: lpfc: Revise copyright for new company language 2018-07-10 22:15:09 -04:00
lpfc.h scsi: lpfc: Fix auto sli_mode and its effect on CONFIG_PORT for SLI3 2021-01-07 23:02:35 -05:00
lpfc_attr.c scsi: lpfc: Fix auto sli_mode and its effect on CONFIG_PORT for SLI3 2021-01-07 23:02:35 -05:00
lpfc_attr.h scsi: lpfc: Revise copyright for new company language 2018-07-10 22:15:09 -04:00
lpfc_bsg.c scsi: lpfc: Fix fall-through warnings for Clang 2020-12-02 12:59:47 -05:00
lpfc_bsg.h scsi: lpfc: Allow applications to issue Common Set Features mailbox command 2020-07-02 23:06:40 -04:00
lpfc_compat.h scsi: lpfc: Revise copyright for new company language 2018-07-10 22:15:09 -04:00
lpfc_crtn.h scsi: lpfc: Fix NVMe recovery after mailbox timeout 2021-01-07 23:02:36 -05:00
lpfc_ct.c scsi: lpfc: Fix missing prototype warning for lpfc_fdmi_vendor_attr_mi() 2020-11-19 22:19:41 -05:00
lpfc_debugfs.c scsi: lpfc: Update changed file copyrights for 2020 2020-11-17 00:43:56 -05:00
lpfc_debugfs.h scsi: lpfc: Make debugfs ktime stats generic for NVME and SCSI 2020-03-29 18:10:58 -04:00
lpfc_disc.h scsi: lpfc: Fix target reset failing 2021-01-07 23:02:36 -05:00
lpfc_els.c scsi: lpfc: Fix target reset failing 2021-01-07 23:02:36 -05:00
lpfc_hbadisc.c scsi: lpfc: Fix crash when a fabric node is released prematurely 2021-01-07 23:02:35 -05:00
lpfc_hw.h scsi: lpfc: Reject CT request for MIB commands 2020-10-26 21:42:39 -04:00
lpfc_hw4.h scsi: lpfc: Update changed file copyrights for 2020 2020-11-17 00:43:56 -05:00
lpfc_ids.h scsi: lpfc: Revise copyright for new company language 2018-07-10 22:15:09 -04:00
lpfc_init.c scsi: lpfc: Fix NVMe recovery after mailbox timeout 2021-01-07 23:02:36 -05:00
lpfc_logmsg.h scsi: lpfc: Add an internal trace log buffer 2020-07-02 23:06:49 -04:00
lpfc_mbox.c scsi: lpfc: Fix a bunch of kerneldoc misdemeanors 2020-07-24 22:32:03 -04:00
lpfc_mem.c scsi: lpfc: Re-fix use after free in lpfc_rq_buf_free() 2020-10-26 21:42:38 -04:00
lpfc_nl.h scsi: lpfc: Revise copyright for new company language 2018-07-10 22:15:09 -04:00
lpfc_nportdisc.c scsi: lpfc: Fix crash when a fabric node is released prematurely 2021-01-07 23:02:35 -05:00
lpfc_nvme.c scsi: lpfc: Fix NVMe recovery after mailbox timeout 2021-01-07 23:02:36 -05:00
lpfc_nvme.h scsi: lpfc: Update changed file copyrights for 2020 2020-11-17 00:43:56 -05:00
lpfc_nvmet.c scsi: lpfc: Fix missing prototype for lpfc_nvmet_prep_abort_wqe() 2020-11-19 22:21:50 -05:00
lpfc_scsi.c scsi: lpfc: Fix target reset failing 2021-01-07 23:02:36 -05:00
lpfc_scsi.h scsi: lpfc: Update 12.2.0.0 file copyrights to 2019 2019-02-05 22:29:50 -05:00
lpfc_sli.c scsi: lpfc: Fix NVMe recovery after mailbox timeout 2021-01-07 23:02:36 -05:00
lpfc_sli.h scsi: lpfc: Update changed file copyrights for 2020 2020-11-17 00:43:56 -05:00
lpfc_sli4.h scsi: lpfc: Add FDMI Vendor MIB support 2020-10-26 21:42:39 -04:00
lpfc_version.h scsi: lpfc: Update lpfc version to 12.8.0.6 2020-11-17 00:43:56 -05:00
lpfc_vport.c scsi: lpfc: Update changed file copyrights for 2020 2020-11-17 00:43:56 -05:00
lpfc_vport.h scsi: lpfc: Revise copyright for new company language 2018-07-10 22:15:09 -04:00