]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
scsi: lpfc: Fix propagation of devloss_tmo setting to nvme transport
authorJames Smart <jsmart2021@gmail.com>
Wed, 14 Aug 2019 23:56:48 +0000 (16:56 -0700)
committerMartin K. Petersen <martin.petersen@oracle.com>
Tue, 20 Aug 2019 02:41:10 +0000 (22:41 -0400)
If admin changes the devloss_tmo on an rport via the fc_remote_port rport
dev_loss_tmo attribute, the value is on set on scsi stack.  The change is
not propagated to NVMe.

The set routine in the lldd lacks the call to
nvme_fc_set_remoteport_devloss() to set the value.

Fix by adding the call to the lldd set routine.

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_attr.c

index 0e71348bf3a34094f9d020d230aa44a732cb4b74..b527cc60e939109a5133733ed71b4a8b416b2b5a 100644 (file)
@@ -6845,10 +6845,31 @@ lpfc_get_starget_port_name(struct scsi_target *starget)
 static void
 lpfc_set_rport_loss_tmo(struct fc_rport *rport, uint32_t timeout)
 {
+       struct lpfc_rport_data *rdata = rport->dd_data;
+       struct lpfc_nodelist *ndlp = rdata->pnode;
+#if (IS_ENABLED(CONFIG_NVME_FC))
+       struct lpfc_nvme_rport *nrport = NULL;
+#endif
+
        if (timeout)
                rport->dev_loss_tmo = timeout;
        else
                rport->dev_loss_tmo = 1;
+
+       if (!ndlp || !NLP_CHK_NODE_ACT(ndlp)) {
+               dev_info(&rport->dev, "Cannot find remote node to "
+                                     "set rport dev loss tmo, port_id x%x\n",
+                                     rport->port_id);
+               return;
+       }
+
+#if (IS_ENABLED(CONFIG_NVME_FC))
+       nrport = lpfc_ndlp_get_nrport(ndlp);
+
+       if (nrport && nrport->remoteport)
+               nvme_fc_set_remoteport_devloss(nrport->remoteport,
+                                              rport->dev_loss_tmo);
+#endif
 }
 
 /**