Re: [PATCH 09/15] qla2xxx: fix N2N and NVME connect retry failure

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




> On Dec 1, 2020, at 2:27 AM, Nilesh Javali <njavali@xxxxxxxxxxx> wrote:
> 
> From: Quinn Tran <qutran@xxxxxxxxxxx>
> 
> FC-NVMe target discovery failed when initiator wwpn < target wwpn in an
> N2N (Direct Attach) config, where the driver was stuck on FCP PRLI
> mode and failed to retry with NVME PRLI.
> 
> Signed-off-by: Quinn Tran <qutran@xxxxxxxxxxx>
> Signed-off-by: Nilesh Javali <njavali@xxxxxxxxxxx>

Missing Fixes tag 

Fixes: 84ed362ac40ca ("scsi: qla2xxx: Dual FCP-NVMe target port support”)
Fixes: 983f127603fac ("scsi: qla2xxx: Retry PLOGI on FC-NVMe PRLI failure”)

> ---
> drivers/scsi/qla2xxx/qla_init.c | 71 ++++++++++++++++++++++++---------
> drivers/scsi/qla2xxx/qla_mbx.c  |  3 --
> 2 files changed, 52 insertions(+), 22 deletions(-)
> 
> diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c
> index 5626e9b6949f..12e3b05baf41 100644
> --- a/drivers/scsi/qla2xxx/qla_init.c
> +++ b/drivers/scsi/qla2xxx/qla_init.c
> @@ -1268,9 +1268,10 @@ qla24xx_async_prli(struct scsi_qla_host *vha, fc_port_t *fcport)
> 		lio->u.logio.flags |= SRB_LOGIN_NVME_PRLI;
> 
> 	ql_dbg(ql_dbg_disc, vha, 0x211b,
> -	    "Async-prli - %8phC hdl=%x, loopid=%x portid=%06x retries=%d %s.\n",
> +	    "Async-prli - %8phC hdl=%x, loopid=%x portid=%06x retries=%d fc4type %x priority %x %s.\n",
> 	    fcport->port_name, sp->handle, fcport->loop_id, fcport->d_id.b24,
> -	    fcport->login_retry, NVME_TARGET(vha->hw, fcport) ? "nvme" : "fc");
> +	    fcport->login_retry, fcport->fc4_type, vha->hw->fc4_type_priority,
> +	    NVME_TARGET(vha->hw, fcport) ? "nvme" : "fcp");
> 
> 	rval = qla2x00_start_sp(sp);
> 	if (rval != QLA_SUCCESS) {
> @@ -1932,26 +1933,58 @@ qla24xx_handle_prli_done_event(struct scsi_qla_host *vha, struct event_arg *ea)
> 			break;
> 		}
> 
> -		/*
> -		 * Retry PRLI with other FC-4 type if failure occurred on dual
> -		 * FCP/NVMe port
> -		 */
> -		if (NVME_FCP_TARGET(ea->fcport)) {
> -			ql_dbg(ql_dbg_disc, vha, 0x2118,
> -				"%s %d %8phC post %s prli\n",
> -				__func__, __LINE__, ea->fcport->port_name,
> -				(ea->fcport->fc4_type & FS_FC4TYPE_NVME) ?
> -				"NVMe" : "FCP");
> -			if (vha->hw->fc4_type_priority == FC4_PRIORITY_NVME)
> +		ql_dbg(ql_dbg_disc, vha, 0x2118,
> +		       "%s %d %8phC priority %s, fc4type %x\n",
> +		       __func__, __LINE__, ea->fcport->port_name,
> +		       vha->hw->fc4_type_priority == FC4_PRIORITY_FCP ?
> +		       "FCP" : "NVMe", ea->fcport->fc4_type);
> +
> +		if (N2N_TOPO(vha->hw)) {
> +			if (vha->hw->fc4_type_priority == FC4_PRIORITY_NVME) {
> 				ea->fcport->fc4_type &= ~FS_FC4TYPE_NVME;
> -			else
> +				ea->fcport->fc4_type |= FS_FC4TYPE_FCP;
> +			} else {
> 				ea->fcport->fc4_type &= ~FS_FC4TYPE_FCP;
> -		}
> +				ea->fcport->fc4_type |= FS_FC4TYPE_NVME;
> +			}
> 
> -		ea->fcport->flags &= ~FCF_ASYNC_SENT;
> -		ea->fcport->keep_nport_handle = 0;
> -		ea->fcport->logout_on_delete = 1;
> -		qlt_schedule_sess_for_deletion(ea->fcport);
> +			if (ea->fcport->n2n_link_reset_cnt < 3) {
> +				ea->fcport->n2n_link_reset_cnt++;
> +				vha->relogin_jif = jiffies + 2 * HZ;
> +				/*
> +				 * PRLI failed. Reset link to kick start
> +				 * state machine
> +				 */
> +				set_bit(N2N_LINK_RESET, &vha->dpc_flags);
> +			} else {
> +				ql_log(ql_log_warn, vha, 0x2119,
> +				       "%s %d %8phC Unable to reconnect\n",
> +				       __func__, __LINE__,
> +				       ea->fcport->port_name);
> +			}
> +		} else {
> +			/*
> +			 * switch connect. login failed. Take connection down
> +			 * and allow relogin to retrigger
> +			 */
> +			if (NVME_FCP_TARGET(ea->fcport)) {
> +				ql_dbg(ql_dbg_disc, vha, 0x2118,
> +				       "%s %d %8phC post %s prli\n",
> +				       __func__, __LINE__,
> +				       ea->fcport->port_name,
> +				       (ea->fcport->fc4_type & FS_FC4TYPE_NVME)
> +				       ? "NVMe" : "FCP");
> +				if (vha->hw->fc4_type_priority == FC4_PRIORITY_NVME)
> +					ea->fcport->fc4_type &= ~FS_FC4TYPE_NVME;
> +				else
> +					ea->fcport->fc4_type &= ~FS_FC4TYPE_FCP;
> +			}
> +
> +			ea->fcport->flags &= ~FCF_ASYNC_SENT;
> +			ea->fcport->keep_nport_handle = 0;
> +			ea->fcport->logout_on_delete = 1;
> +			qlt_schedule_sess_for_deletion(ea->fcport);
> +		}
> 		break;
> 	}
> }
> diff --git a/drivers/scsi/qla2xxx/qla_mbx.c b/drivers/scsi/qla2xxx/qla_mbx.c
> index 1b4261c3c476..d7d4ab65009c 100644
> --- a/drivers/scsi/qla2xxx/qla_mbx.c
> +++ b/drivers/scsi/qla2xxx/qla_mbx.c
> @@ -3998,9 +3998,6 @@ qla24xx_report_id_acquisition(scsi_qla_host_t *vha,
> 				fcport->scan_state = QLA_FCPORT_FOUND;
> 				fcport->n2n_flag = 1;
> 				fcport->keep_nport_handle = 1;
> -				fcport->fc4_type = FS_FC4TYPE_FCP;
> -				if (vha->flags.nvme_enabled)
> -					fcport->fc4_type |= FS_FC4TYPE_NVME;
> 
> 				if (wwn_to_u64(vha->port_name) >
> 				    wwn_to_u64(fcport->port_name)) {
> -- 
> 2.19.0.rc0
> 

--
Himanshu Madhani	 Oracle Linux Engineering





[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]

  Powered by Linux