scsi: lpfc: Fix oops if nvmet_fc_register_targetport fails
if nvmet targetport registration fails, the driver encounters a NULL pointer oops in lpfc_hb_timeout_handler. To fix: if registration fails, ensure nvmet_support is cleared on the port structure. Also enhanced the log message on failure. Cc: <stable@vger.kernel.org> # 4.12+ Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com> Signed-off-by: James Smart <james.smart@broadcom.com> Reviewed-by: Johannes Thumshirn <jthumshirn@suse.de> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:

committed by
Martin K. Petersen

parent
cf4c8c8610
commit
e7981a2c72
@@ -1172,9 +1172,14 @@ lpfc_nvmet_create_targetport(struct lpfc_hba *phba)
|
|||||||
#endif
|
#endif
|
||||||
if (error) {
|
if (error) {
|
||||||
lpfc_printf_log(phba, KERN_ERR, LOG_NVME_DISC,
|
lpfc_printf_log(phba, KERN_ERR, LOG_NVME_DISC,
|
||||||
"6025 Cannot register NVME targetport "
|
"6025 Cannot register NVME targetport x%x: "
|
||||||
"x%x\n", error);
|
"portnm %llx nodenm %llx segs %d qs %d\n",
|
||||||
|
error,
|
||||||
|
pinfo.port_name, pinfo.node_name,
|
||||||
|
lpfc_tgttemplate.max_sgl_segments,
|
||||||
|
lpfc_tgttemplate.max_hw_queues);
|
||||||
phba->targetport = NULL;
|
phba->targetport = NULL;
|
||||||
|
phba->nvmet_support = 0;
|
||||||
|
|
||||||
lpfc_nvmet_cleanup_io_context(phba);
|
lpfc_nvmet_cleanup_io_context(phba);
|
||||||
|
|
||||||
@@ -1186,9 +1191,11 @@ lpfc_nvmet_create_targetport(struct lpfc_hba *phba)
|
|||||||
lpfc_printf_log(phba, KERN_INFO, LOG_NVME_DISC,
|
lpfc_printf_log(phba, KERN_INFO, LOG_NVME_DISC,
|
||||||
"6026 Registered NVME "
|
"6026 Registered NVME "
|
||||||
"targetport: %p, private %p "
|
"targetport: %p, private %p "
|
||||||
"portnm %llx nodenm %llx\n",
|
"portnm %llx nodenm %llx segs %d qs %d\n",
|
||||||
phba->targetport, tgtp,
|
phba->targetport, tgtp,
|
||||||
pinfo.port_name, pinfo.node_name);
|
pinfo.port_name, pinfo.node_name,
|
||||||
|
lpfc_tgttemplate.max_sgl_segments,
|
||||||
|
lpfc_tgttemplate.max_hw_queues);
|
||||||
|
|
||||||
atomic_set(&tgtp->rcv_ls_req_in, 0);
|
atomic_set(&tgtp->rcv_ls_req_in, 0);
|
||||||
atomic_set(&tgtp->rcv_ls_req_out, 0);
|
atomic_set(&tgtp->rcv_ls_req_out, 0);
|
||||||
|
Reference in New Issue
Block a user