Re: [PATCH 4/6] qla2xxx: Fix stuck login session

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

 



On Fri, 2019-08-30 at 15:24 -0700, Himanshu Madhani wrote:
> From: Quinn Tran <qutran@xxxxxxxxxxx>
> 
> Login session was stucked on cable pull. When FW is in the middle
> PRLI PENDING + driver is in Initiator mode, driver fail to
> check back with FW to see if the PRLI has completed. This patch
> would re-check with FW again to make sure PRLI would complete before
> pushing forward with relogin.
> 
> Signed-off-by: Quinn Tran <qutran@xxxxxxxxxxx>
> Signed-off-by: Himanshu Madhani <hmadhani@xxxxxxxxxxx>
> ---
>  drivers/scsi/qla2xxx/qla_init.c | 23 +++++++++++------------
>  1 file changed, 11 insertions(+), 12 deletions(-)
> 
> diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c
> index 8161f08f3a4d..2bbadcf60295 100644
> --- a/drivers/scsi/qla2xxx/qla_init.c
> +++ b/drivers/scsi/qla2xxx/qla_init.c
> @@ -808,6 +808,15 @@ static void qla24xx_handle_gnl_done_event(scsi_qla_host_t *vha,
>  			fcport->fw_login_state = current_login_state;
>  			fcport->d_id = id;
>  			switch (current_login_state) {
> +			case DSC_LS_PRLI_PEND:
> +				/*
> +				 * In the middle of PRLI. Let it finish.
> +				 * Allow relogin code to recheck state again
> +				 * with GNL. Push disc_state back to DELETED
> +				 * so GNL can go out again
> +				 */
> +				fcport->disc_state = DSC_DELETED;
> +				break;
>  			case DSC_LS_PRLI_COMP:
>  				if ((e->prli_svc_param_word_3[0] & BIT_4) == 0)
>  					fcport->port_type = FCT_INITIATOR;
> @@ -1474,7 +1483,7 @@ int qla24xx_fcport_handle_login(struct scsi_qla_host *vha, fc_port_t *fcport)
>  	u64 wwn;
>  	u16 sec;
>  
> -	ql_dbg(ql_dbg_disc + ql_dbg_verbose, vha, 0x20d8,
> +	ql_dbg(ql_dbg_disc, vha, 0x20d8,
>  	    "%s %8phC DS %d LS %d P %d fl %x confl %p rscn %d|%d login %d lid %d scan %d\n",
>  	    __func__, fcport->port_name, fcport->disc_state,
>  	    fcport->fw_login_state, fcport->login_pause, fcport->flags,
> @@ -1485,6 +1494,7 @@ int qla24xx_fcport_handle_login(struct scsi_qla_host *vha, fc_port_t *fcport)
>  		return 0;
>  
>  	if ((fcport->loop_id != FC_NO_LOOP_ID) &&
> +	    qla_dual_mode_enabled(vha) &&
>  	    ((fcport->fw_login_state == DSC_LS_PLOGI_PEND) ||
>  	     (fcport->fw_login_state == DSC_LS_PRLI_PEND)))
>  		return 0;
> @@ -1674,17 +1684,6 @@ void qla24xx_handle_relogin_event(scsi_qla_host_t *vha,
>  	    fcport->last_login_gen, fcport->login_gen,
>  	    fcport->flags);
>  
> -	if ((fcport->fw_login_state == DSC_LS_PLOGI_PEND) ||
> -	    (fcport->fw_login_state == DSC_LS_PRLI_PEND))
> -		return;
> -
> -	if (fcport->fw_login_state == DSC_LS_PLOGI_COMP) {
> -		if (time_before_eq(jiffies, fcport->plogi_nack_done_deadline)) {
> -			set_bit(RELOGIN_NEEDED, &vha->dpc_flags);
> -			return;
> -		}
> -	}
> -
>  	if (fcport->last_rscn_gen != fcport->rscn_gen) {
>  		ql_dbg(ql_dbg_disc, vha, 0x20e9, "%s %d %8phC post gnl\n",
>  		    __func__, __LINE__, fcport->port_name);

Reviewed-by: Ewan D. Milne <emilne@xxxxxxxxxx>




[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