diff mbox series

[06/10] qla2xxx: Fix session hang in gnl

Message ID 20230712090535.34894-7-njavali@marvell.com
State Superseded
Headers show
Series qla2xxx driver bug fixes | expand

Commit Message

Nilesh Javali July 12, 2023, 9:05 a.m. UTC
From: Quinn Tran <qutran@marvell.com>

Connection does not resume after a host reset /
chip reset. The cause of the blockage is due to the FCF_ASYNC_ACTIVE
left on. The gnl command was interrupted by the chip reset. On
exiting the command, this flag should be turn off to allow relogin
to reoccur. Clear this flag to prevent blockage.

Cc: stable@vger.kernel.org
Fixes: 17e64648aa47 (“scsi: qla2xxx: Correct fcport flags handling”)
Signed-off-by: Quinn Tran <qutran@marvell.com>
Signed-off-by: Nilesh Javali <njavali@marvell.com>
---
 drivers/scsi/qla2xxx/qla_init.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

Comments

Himanshu Madhani July 13, 2023, 7:28 p.m. UTC | #1
> On Jul 12, 2023, at 2:05 AM, Nilesh Javali <njavali@marvell.com> wrote:
> 
> From: Quinn Tran <qutran@marvell.com>
> 
> Connection does not resume after a host reset /
> chip reset. The cause of the blockage is due to the FCF_ASYNC_ACTIVE
> left on. The gnl command was interrupted by the chip reset. On
> exiting the command, this flag should be turn off to allow relogin
> to reoccur. Clear this flag to prevent blockage.
> 
> Cc: stable@vger.kernel.org
> Fixes: 17e64648aa47 (“scsi: qla2xxx: Correct fcport flags handling”)
> Signed-off-by: Quinn Tran <qutran@marvell.com>
> Signed-off-by: Nilesh Javali <njavali@marvell.com>
> ---
> drivers/scsi/qla2xxx/qla_init.c | 5 +++--
> 1 file changed, 3 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c
> index 725806ca9572..06c4e5215789 100644
> --- a/drivers/scsi/qla2xxx/qla_init.c
> +++ b/drivers/scsi/qla2xxx/qla_init.c
> @@ -1141,7 +1141,7 @@ int qla24xx_async_gnl(struct scsi_qla_host *vha, fc_port_t *fcport)
> u16 *mb;
> 
> if (!vha->flags.online || (fcport->flags & FCF_ASYNC_SENT))
> - return rval;
> + goto done;
> 
> ql_dbg(ql_dbg_disc, vha, 0x20d9,
>    "Async-gnlist WWPN %8phC \n", fcport->port_name);
> @@ -1195,8 +1195,9 @@ int qla24xx_async_gnl(struct scsi_qla_host *vha, fc_port_t *fcport)
> done_free_sp:
> /* ref: INIT */
> kref_put(&sp->cmd_kref, qla2x00_sp_release);
> + fcport->flags &= ~(FCF_ASYNC_SENT);
> done:
> - fcport->flags &= ~(FCF_ASYNC_ACTIVE | FCF_ASYNC_SENT);
> + fcport->flags &= ~(FCF_ASYNC_ACTIVE);
> return rval;
> }
> 
> -- 
> 2.23.1
> 

Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>
diff mbox series

Patch

diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c
index 725806ca9572..06c4e5215789 100644
--- a/drivers/scsi/qla2xxx/qla_init.c
+++ b/drivers/scsi/qla2xxx/qla_init.c
@@ -1141,7 +1141,7 @@  int qla24xx_async_gnl(struct scsi_qla_host *vha, fc_port_t *fcport)
 	u16 *mb;
 
 	if (!vha->flags.online || (fcport->flags & FCF_ASYNC_SENT))
-		return rval;
+		goto done;
 
 	ql_dbg(ql_dbg_disc, vha, 0x20d9,
 	    "Async-gnlist WWPN %8phC \n", fcport->port_name);
@@ -1195,8 +1195,9 @@  int qla24xx_async_gnl(struct scsi_qla_host *vha, fc_port_t *fcport)
 done_free_sp:
 	/* ref: INIT */
 	kref_put(&sp->cmd_kref, qla2x00_sp_release);
+	fcport->flags &= ~(FCF_ASYNC_SENT);
 done:
-	fcport->flags &= ~(FCF_ASYNC_ACTIVE | FCF_ASYNC_SENT);
+	fcport->flags &= ~(FCF_ASYNC_ACTIVE);
 	return rval;
 }