| From 2adbcd769bfd3d413da5b1f6915bd716dff8c63e Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Sun, 11 Apr 2021 18:31:13 -0700 |
| Subject: scsi: lpfc: Fix crash when a REG_RPI mailbox fails triggering a LOGO |
| response |
| |
| From: James Smart <jsmart2021@gmail.com> |
| |
| [ Upstream commit fffd18ec6579c2d9c72b212169259062fe747888 ] |
| |
| Fix a crash caused by a double put on the node when the driver completed an |
| ACC for an unsolicted abort on the same node. The second put was executed |
| by lpfc_nlp_not_used() and is wrong because the completion routine executes |
| the nlp_put when the iocbq was released. Additionally, the driver is |
| issuing a LOGO then immediately calls lpfc_nlp_set_state to put the node |
| into NPR. This call does nothing. |
| |
| Remove the lpfc_nlp_not_used call and additional set_state in the |
| completion routine. Remove the lpfc_nlp_set_state post issue_logo. Isn't |
| necessary. |
| |
| Link: https://lore.kernel.org/r/20210412013127.2387-3-jsmart2021@gmail.com |
| Co-developed-by: Justin Tee <justin.tee@broadcom.com> |
| Signed-off-by: Justin Tee <justin.tee@broadcom.com> |
| Signed-off-by: James Smart <jsmart2021@gmail.com> |
| Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/scsi/lpfc/lpfc_nportdisc.c | 2 -- |
| drivers/scsi/lpfc/lpfc_sli.c | 1 - |
| 2 files changed, 3 deletions(-) |
| |
| diff --git a/drivers/scsi/lpfc/lpfc_nportdisc.c b/drivers/scsi/lpfc/lpfc_nportdisc.c |
| index 40c6d6eacea9..da6685700b04 100644 |
| --- a/drivers/scsi/lpfc/lpfc_nportdisc.c |
| +++ b/drivers/scsi/lpfc/lpfc_nportdisc.c |
| @@ -1707,8 +1707,6 @@ lpfc_cmpl_reglogin_reglogin_issue(struct lpfc_vport *vport, |
| ndlp->nlp_last_elscmd = ELS_CMD_PLOGI; |
| |
| lpfc_issue_els_logo(vport, ndlp, 0); |
| - ndlp->nlp_prev_state = NLP_STE_REG_LOGIN_ISSUE; |
| - lpfc_nlp_set_state(vport, ndlp, NLP_STE_NPR_NODE); |
| return ndlp->nlp_state; |
| } |
| |
| diff --git a/drivers/scsi/lpfc/lpfc_sli.c b/drivers/scsi/lpfc/lpfc_sli.c |
| index 45445dafc80c..27578816d852 100644 |
| --- a/drivers/scsi/lpfc/lpfc_sli.c |
| +++ b/drivers/scsi/lpfc/lpfc_sli.c |
| @@ -16637,7 +16637,6 @@ lpfc_sli4_seq_abort_rsp_cmpl(struct lpfc_hba *phba, |
| if (cmd_iocbq) { |
| ndlp = (struct lpfc_nodelist *)cmd_iocbq->context1; |
| lpfc_nlp_put(ndlp); |
| - lpfc_nlp_not_used(ndlp); |
| lpfc_sli_release_iocbq(phba, cmd_iocbq); |
| } |
| |
| -- |
| 2.30.2 |
| |