diff mbox series

lpfc: Fix EEH encountering oops with nvme traffic

Message ID 20210127221601.84878-1-jsmart2021@gmail.com
State New
Headers show
Series lpfc: Fix EEH encountering oops with nvme traffic | expand

Commit Message

James Smart Jan. 27, 2021, 10:16 p.m. UTC
In testing, in a configuration with Redfish and native nvme multipath
when an EEH is injected, a kernel oops is being encountered:
(unreliable)
lpfc_nvme_ls_req+0x328/0x720 [lpfc]
__nvme_fc_send_ls_req.constprop.13+0x1d8/0x3d0 [nvme_fc]
nvme_fc_create_association+0x224/0xd10 [nvme_fc]
nvme_fc_reset_ctrl_work+0x110/0x154 [nvme_fc]
process_one_work+0x304/0x5d

the nvme transport is issuing a Disconnect LS request, which the driver
receives and tries to post but the work queue used by the driver is
already being torn down by the eeh.

Fix by validating the validity of the work queue before proceeding with
the LS transmit.

Signed-off-by: James Smart <jsmart2021@gmail.com>
---
 drivers/scsi/lpfc/lpfc_nvme.c | 3 +++
 1 file changed, 3 insertions(+)

Comments

Martin K. Petersen Jan. 29, 2021, 7:01 p.m. UTC | #1
On Wed, 27 Jan 2021 14:16:01 -0800, James Smart wrote:

> In testing, in a configuration with Redfish and native nvme multipath

> when an EEH is injected, a kernel oops is being encountered:

> (unreliable)

> lpfc_nvme_ls_req+0x328/0x720 [lpfc]

> __nvme_fc_send_ls_req.constprop.13+0x1d8/0x3d0 [nvme_fc]

> nvme_fc_create_association+0x224/0xd10 [nvme_fc]

> nvme_fc_reset_ctrl_work+0x110/0x154 [nvme_fc]

> process_one_work+0x304/0x5d

> 

> [...]


Applied to 5.11/scsi-fixes, thanks!

[1/1] lpfc: Fix EEH encountering oops with nvme traffic
      https://git.kernel.org/mkp/scsi/c/8c65830ae162

-- 
Martin K. Petersen	Oracle Linux Engineering
diff mbox series

Patch

diff --git a/drivers/scsi/lpfc/lpfc_nvme.c b/drivers/scsi/lpfc/lpfc_nvme.c
index 5e990f4c1ca6..4d819e52496a 100644
--- a/drivers/scsi/lpfc/lpfc_nvme.c
+++ b/drivers/scsi/lpfc/lpfc_nvme.c
@@ -559,6 +559,9 @@  __lpfc_nvme_ls_req(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
 		return -ENODEV;
 	}
 
+	if (!vport->phba->sli4_hba.nvmels_wq)
+		return -ENOMEM;
+
 	/*
 	 * there are two dma buf in the request, actually there is one and
 	 * the second one is just the start address + cmd size.