Implement set_rport_marginal callback using nvme_fc_set_remoteport_fpin() to enable FPIN notifications for NVMe. Signed-off-by: Jesse Taube --- V10 -> V11 - Rewrite --- drivers/scsi/lpfc/lpfc_attr.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/drivers/scsi/lpfc/lpfc_attr.c b/drivers/scsi/lpfc/lpfc_attr.c index f4e8164b94ab..d54899cceed9 100644 --- a/drivers/scsi/lpfc/lpfc_attr.c +++ b/drivers/scsi/lpfc/lpfc_attr.c @@ -7134,6 +7134,30 @@ lpfc_set_rport_loss_tmo(struct fc_rport *rport, uint32_t timeout) #endif } +static void +lpfc_set_rport_marginal(struct fc_rport *rport, bool marginal) +{ + struct lpfc_rport_data *rdata = rport->dd_data; + struct lpfc_nodelist *ndlp = rdata->pnode; + struct lpfc_nvme_rport *nrport = NULL; + + /* Break early if NVME_FC is not enabled */ + if (!IS_ENABLED(CONFIG_NVME_FC)) + return; + + if (!ndlp) { + dev_info(&rport->dev, "Cannot find remote node to "); + dev_info(&rport->dev, "set rport marginal, port_id x%x\n", + rport->port_id); + return; + } + + nrport = lpfc_ndlp_get_nrport(ndlp); + + if (nrport && nrport->remoteport) + nvme_fc_set_remoteport_fpin(nrport->remoteport, marginal); +} + /* * lpfc_rport_show_function - Return rport target information * @@ -7244,6 +7268,8 @@ struct fc_function_template lpfc_transport_functions = { .set_rport_dev_loss_tmo = lpfc_set_rport_loss_tmo, .show_rport_dev_loss_tmo = 1, + .set_rport_marginal = lpfc_set_rport_marginal, + .get_starget_port_id = lpfc_get_starget_port_id, .show_starget_port_id = 1, @@ -7315,6 +7341,8 @@ struct fc_function_template lpfc_vport_transport_functions = { .set_rport_dev_loss_tmo = lpfc_set_rport_loss_tmo, .show_rport_dev_loss_tmo = 1, + .set_rport_marginal = lpfc_set_rport_marginal, + .get_starget_port_id = lpfc_get_starget_port_id, .show_starget_port_id = 1, -- 2.54.0