Re: [PATCH 07/13] qla2xxx: Fix hang due to session stuck

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

 




> On Mar 8, 2022, at 12:20 AM, Nilesh Javali <njavali@xxxxxxxxxxx> wrote:
> 
> From: Quinn Tran <qutran@xxxxxxxxxxx>
> 
> User experience device lost. The log shows Get port data base
> command was queued up, failed, and requeued again. Every time
> it is requeued, it set the FCF_ASYNC_ACTIVE. This prevents any
> recovery code from occurring because driver thinks a recovery is in
> progress for this session. In essence, this session is hung.
> The reason it gets into this place is the session deletion got
> in front of this call due to link perturbation.
> 
> Break the requeue cycle and exit.
> The session deletion code will trigger a session relogin.
> 
> Cc: stable@xxxxxxxxxxxxxxx
> Fixes: 726b85487067 ("qla2xxx: Add framework for async fabric discovery")
> Signed-off-by: Quinn Tran <qutran@xxxxxxxxxxx>
> Signed-off-by: Nilesh Javali <njavali@xxxxxxxxxxx>
> ---
> drivers/scsi/qla2xxx/qla_def.h  |  4 ++++
> drivers/scsi/qla2xxx/qla_init.c | 19 +++++++++++++++++--
> 2 files changed, 21 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h
> index 47d7fa1c7ae8..b0579bce5b88 100644
> --- a/drivers/scsi/qla2xxx/qla_def.h
> +++ b/drivers/scsi/qla2xxx/qla_def.h
> @@ -5437,4 +5437,8 @@ struct ql_vnd_tgt_stats_resp {
> #include "qla_gbl.h"
> #include "qla_dbg.h"
> #include "qla_inline.h"
> +
> +#define SESSION_DELETE(_fcport) (_fcport->disc_state == DSC_DELETE_PEND || \
> +				 _fcport->disc_state == DSC_DELETED)
> +

would you be open to changing the macro name to IS_SESSION_DELETED(). Since you are checking for pending deletion in progress or deleted for session, name SESSION_DELETE is not reader friendly. 

> #endif
> diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c
> index 6ffe44b805b6..3c58a2911937 100644
> --- a/drivers/scsi/qla2xxx/qla_init.c
> +++ b/drivers/scsi/qla2xxx/qla_init.c
> @@ -575,6 +575,14 @@ qla2x00_async_adisc(struct scsi_qla_host *vha, fc_port_t *fcport,
> 	struct srb_iocb *lio;
> 	int rval = QLA_FUNCTION_FAILED;
> 
> +	if (SESSION_DELETE(fcport)) {
> +		ql_log(ql_log_warn, vha, 0xffff,
> +		       "%s: %8phC is being delete - not sending command.\n",
> +		       __func__, fcport->port_name);
> +		fcport->flags &= ~FCF_ASYNC_ACTIVE;
> +		return rval;
> +	}
> +
> 	if (!vha->flags.online || (fcport->flags & FCF_ASYNC_SENT))
> 		return rval;
> 
> @@ -1338,8 +1346,15 @@ int qla24xx_async_gpdb(struct scsi_qla_host *vha, fc_port_t *fcport, u8 opt)
> 	struct port_database_24xx *pd;
> 	struct qla_hw_data *ha = vha->hw;
> 
> -	if (!vha->flags.online || (fcport->flags & FCF_ASYNC_SENT) ||
> -	    fcport->loop_id == FC_NO_LOOP_ID) {
> +	if (SESSION_DELETE(fcport)) {
> +		ql_log(ql_log_warn, vha, 0xffff,
> +		       "%s: %8phC is being delete - not sending command.\n",
> +		       __func__, fcport->port_name);
> +		fcport->flags &= ~FCF_ASYNC_ACTIVE;
> +		return rval;
> +	}
> +
> +	if (!vha->flags.online || fcport->flags & FCF_ASYNC_SENT) {
> 		ql_log(ql_log_warn, vha, 0xffff,
> 		    "%s: %8phC online %d flags %x - not sending command.\n",
> 		    __func__, fcport->port_name, vha->flags.online, fcport->flags);
> -- 
> 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