scsi: qla2xxx: NVME|FCP prefer flag not being honored

commit 69aecdd410 upstream.

Changing of [FCP|NVME] prefer flag in flash has no effect on driver. For
device that supports both FCP + NVMe over the same connection, driver
continues to connect to this device using the previous successful login
mode.

On completion of flash update, adapter will be reset. Driver will
reset the prefer flag based on setting from flash.

Cc: stable@vger.kernel.org
Signed-off-by: Quinn Tran <qutran@marvell.com>
Signed-off-by: Nilesh Javali <njavali@marvell.com>
Link: https://lore.kernel.org/r/20240227164127.36465-6-njavali@marvell.com
Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Quinn Tran 2024-02-27 22:11:21 +05:30 committed by Greg Kroah-Hartman
parent a139d643c5
commit 0bd653100a
1 changed files with 18 additions and 0 deletions

View File

@ -7582,6 +7582,7 @@ qla2x00_abort_isp(scsi_qla_host_t *vha)
struct scsi_qla_host *vp, *tvp;
struct req_que *req = ha->req_q_map[0];
unsigned long flags;
fc_port_t *fcport;
if (vha->flags.online) {
qla2x00_abort_isp_cleanup(vha);
@ -7647,6 +7648,15 @@ qla2x00_abort_isp(scsi_qla_host_t *vha)
"ISP Abort - ISP reg disconnect post nvmram config, exiting.\n");
return status;
}
/* User may have updated [fcp|nvme] prefer in flash */
list_for_each_entry(fcport, &vha->vp_fcports, list) {
if (NVME_PRIORITY(ha, fcport))
fcport->do_prli_nvme = 1;
else
fcport->do_prli_nvme = 0;
}
if (!qla2x00_restart_isp(vha)) {
clear_bit(RESET_MARKER_NEEDED, &vha->dpc_flags);
@ -7717,6 +7727,14 @@ qla2x00_abort_isp(scsi_qla_host_t *vha)
atomic_inc(&vp->vref_count);
spin_unlock_irqrestore(&ha->vport_slock, flags);
/* User may have updated [fcp|nvme] prefer in flash */
list_for_each_entry(fcport, &vp->vp_fcports, list) {
if (NVME_PRIORITY(ha, fcport))
fcport->do_prli_nvme = 1;
else
fcport->do_prli_nvme = 0;
}
qla2x00_vp_abort_isp(vp);
spin_lock_irqsave(&ha->vport_slock, flags);