scsi: lpfc: Use the nvme-fc transport supplied timeout for LS requests
authorJames Smart <jsmart2021@gmail.com>
Mon, 4 Jan 2021 18:02:30 +0000 (10:02 -0800)
committerMartin K. Petersen <martin.petersen@oracle.com>
Fri, 8 Jan 2021 04:02:35 +0000 (23:02 -0500)
When lpfc generates a GEN_REQUEST wqe for the nvme LS (such as Create
Association), the timeout is set to R_A_TOV without regard to the timeout
value supplied by the nvme-fc transport. The driver should be setting the
timeout to the value passed into the routine. Additionally the caller
should be setting the timeout value to the value in the ls request set by
the nvme transport. Instead, it unconditionally is setting it to a driver
defined value.  So the driver actually overrode the value twice.

Fix by using the timeout provided to the routine, and for the caller, set
the timeout to the ls request timeout value.

Link: https://lore.kernel.org/r/20210104180240.46824-6-jsmart2021@gmail.com
Co-developed-by: Dick Kennedy <dick.kennedy@broadcom.com>
Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com>
Signed-off-by: James Smart <jsmart2021@gmail.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/lpfc/lpfc_nvme.c

index 1cb82fa6a60e4c40d6e1c9d35287c274dc286fd0..fd4a1cf0e4a67f1950ef8cf221d18051e1e639b1 100644 (file)
@@ -458,7 +458,7 @@ lpfc_nvme_gen_req(struct lpfc_vport *vport, struct lpfc_dmabuf *bmp,
        bf_set(wqe_xri_tag, &wqe->gen_req.wqe_com, genwqe->sli4_xritag);
 
        /* Word 7 */
-       bf_set(wqe_tmo, &wqe->gen_req.wqe_com, (vport->phba->fc_ratov-1));
+       bf_set(wqe_tmo, &wqe->gen_req.wqe_com, tmo);
        bf_set(wqe_class, &wqe->gen_req.wqe_com, CLASS3);
        bf_set(wqe_cmnd, &wqe->gen_req.wqe_com, CMD_GEN_REQUEST64_WQE);
        bf_set(wqe_ct, &wqe->gen_req.wqe_com, SLI4_CT_RPI);
@@ -615,7 +615,7 @@ __lpfc_nvme_ls_req(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
 
        ret = lpfc_nvme_gen_req(vport, bmp, pnvme_lsreq->rqstaddr,
                                pnvme_lsreq, gen_req_cmp, ndlp, 2,
-                               LPFC_NVME_LS_TIMEOUT, 0);
+                               pnvme_lsreq->timeout, 0);
        if (ret != WQE_SUCCESS) {
                lpfc_printf_vlog(vport, KERN_ERR, LOG_TRACE_EVENT,
                                 "6052 NVMEx REQ: EXIT. issue ls wqe failed "