scsi: lpfc: Fix FCP hba_wqidx assignment
authorDick Kennedy <dick.kennedy@broadcom.com>
Sat, 30 Sep 2017 00:34:35 +0000 (17:34 -0700)
committerMartin K. Petersen <martin.petersen@oracle.com>
Tue, 3 Oct 2017 02:46:36 +0000 (22:46 -0400)
The driver is encountering  oops in lpfc_sli_calc_ring.

The driver is setting hba_wqidx for FCP based on the policy in use for
NVME. The two may not be the same.  Change to set the wqidx based on the
FCP policy.

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>
drivers/scsi/lpfc/lpfc_sli.c

index 2893d4fb9654e853a4ffedd05372bfc3c3d391e3..8c37885f48511c1a62aa2d22990451092d487b43 100644 (file)
@@ -9396,10 +9396,13 @@ lpfc_sli4_calc_ring(struct lpfc_hba *phba, struct lpfc_iocbq *piocb)
                         * for abort iocb hba_wqidx should already
                         * be setup based on what work queue we used.
                         */
-                       if (!(piocb->iocb_flag & LPFC_USE_FCPWQIDX))
+                       if (!(piocb->iocb_flag & LPFC_USE_FCPWQIDX)) {
                                piocb->hba_wqidx =
                                        lpfc_sli4_scmd_to_wqidx_distr(phba,
                                                              piocb->context1);
+                               piocb->hba_wqidx = piocb->hba_wqidx %
+                                       phba->cfg_fcp_io_channel;
+                       }
                        return phba->sli4_hba.fcp_wq[piocb->hba_wqidx]->pring;
                } else {
                        if (unlikely(!phba->sli4_hba.oas_wq))