]> www.infradead.org Git - users/hch/misc.git/commitdiff
scsi: lpfc: Abort outstanding ELS WQEs regardless of if rmmod is in progress
authorJustin Tee <justin.tee@broadcom.com>
Mon, 15 Sep 2025 18:07:59 +0000 (11:07 -0700)
committerMartin K. Petersen <martin.petersen@oracle.com>
Wed, 17 Sep 2025 02:19:59 +0000 (22:19 -0400)
Driver rmmod may take a long time when in a very large SAN environment.
This is because outstanding ELS WQEs may end up taking E_D_TOV seconds
to complete causing long delays.  Speed this up by issuing aborts with
the ia bit set so that outstanding ELS WQEs complete faster.

Signed-off-by: Justin Tee <justin.tee@broadcom.com>
Message-ID: <20250915180811.137530-3-justintee8345@gmail.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/lpfc/lpfc_sli.c

index a8fbdf7119d88880a4d194aacee2123871d86efd..f84dca848bf064025b8e068ad6efff791c8298bb 100644 (file)
@@ -12439,19 +12439,11 @@ lpfc_sli_issue_abort_iotag(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,
        }
 
        /*
-        * If we're unloading, don't abort iocb on the ELS ring, but change
-        * the callback so that nothing happens when it finishes.
+        * Always abort the outstanding WQE and set the IA bit correctly
+        * for the context.  This is necessary for correctly removing
+        * outstanding ndlp reference counts when the CQE completes with
+        * the XB bit set.
         */
-       if (test_bit(FC_UNLOADING, &vport->load_flag) &&
-           pring->ringno == LPFC_ELS_RING) {
-               if (cmdiocb->cmd_flag & LPFC_IO_FABRIC)
-                       cmdiocb->fabric_cmd_cmpl = lpfc_ignore_els_cmpl;
-               else
-                       cmdiocb->cmd_cmpl = lpfc_ignore_els_cmpl;
-               return retval;
-       }
-
-       /* issue ABTS for this IOCB based on iotag */
        abtsiocbp = __lpfc_sli_get_iocbq(phba);
        if (abtsiocbp == NULL)
                return IOCB_NORESOURCE;