]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
scsi: lpfc: Early return out of FDMI cmpl for locally rejected statuses
authorJustin Tee <justin.tee@broadcom.com>
Wed, 18 Jun 2025 19:21:30 +0000 (12:21 -0700)
committerMartin K. Petersen <martin.petersen@oracle.com>
Mon, 23 Jun 2025 17:10:33 +0000 (13:10 -0400)
If an FDMI request completes with local reject status and the request is
not retryable, there's no need to parse an FDMI response payload.  Insert
an early return statement for such cases.

Signed-off-by: Justin Tee <justin.tee@broadcom.com>
Link: https://lore.kernel.org/r/20250618192138.124116-6-justintee8345@gmail.com
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/lpfc/lpfc_ct.c

index a88099b6e713037c752c8e245fff1ed831f08c1b..6baf1916d8278923cdfc4c76b55ec054b4f053b1 100644 (file)
@@ -2229,21 +2229,6 @@ lpfc_cmpl_ct_disc_fdmi(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb,
                /* Look for a retryable error */
                if (ulp_status == IOSTAT_LOCAL_REJECT) {
                        switch ((ulp_word4 & IOERR_PARAM_MASK)) {
-                       case IOERR_SLI_ABORTED:
-                       case IOERR_SLI_DOWN:
-                               /* Driver aborted this IO.  No retry as error
-                                * is likely Offline->Online or some adapter
-                                * error.  Recovery will try again, but if port
-                                * is not active there's no point to continue
-                                * issuing follow up FDMI commands.
-                                */
-                               if (!(phba->sli.sli_flag & LPFC_SLI_ACTIVE)) {
-                                       free_ndlp = cmdiocb->ndlp;
-                                       lpfc_ct_free_iocb(phba, cmdiocb);
-                                       lpfc_nlp_put(free_ndlp);
-                                       return;
-                               }
-                               break;
                        case IOERR_ABORT_IN_PROGRESS:
                        case IOERR_SEQUENCE_TIMEOUT:
                        case IOERR_ILLEGAL_FRAME:
@@ -2269,6 +2254,9 @@ lpfc_cmpl_ct_disc_fdmi(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb,
        lpfc_ct_free_iocb(phba, cmdiocb);
        lpfc_nlp_put(free_ndlp);
 
+       if (ulp_status != IOSTAT_SUCCESS)
+               return;
+
        ndlp = lpfc_findnode_did(vport, FDMI_DID);
        if (!ndlp)
                return;