diff mbox series

[01/10] qla2xxx: Check if port is online before sending ELS

Message ID 20221214045014.19362-2-njavali@marvell.com
State Superseded
Headers show
Series Misc. qla2xxx driver bug fixes | expand

Commit Message

Nilesh Javali Dec. 14, 2022, 4:50 a.m. UTC
From: Shreyas Deodhar <sdeodhar@marvell.com>

CT Ping and ELS cmds fail for NVMe targets.
Check if port is online before sending ELS instead of
sending login.

Cc: stable@vger.kernel.org
Signed-off-by: Shreyas Deodhar <sdeodhar@marvell.com>
Signed-off-by: Nilesh Javali <njavali@marvell.com>
---
 drivers/scsi/qla2xxx/qla_bsg.c | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

Comments

Himanshu Madhani Dec. 15, 2022, 4:54 p.m. UTC | #1
> On Dec 13, 2022, at 8:50 PM, Nilesh Javali <njavali@marvell.com> wrote:
> 
> From: Shreyas Deodhar <sdeodhar@marvell.com>
> 
> CT Ping and ELS cmds fail for NVMe targets.
> Check if port is online before sending ELS instead of
> sending login.
> 
> Cc: stable@vger.kernel.org
> Signed-off-by: Shreyas Deodhar <sdeodhar@marvell.com>
> Signed-off-by: Nilesh Javali <njavali@marvell.com>
> ---
> drivers/scsi/qla2xxx/qla_bsg.c | 9 +++++----
> 1 file changed, 5 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/scsi/qla2xxx/qla_bsg.c b/drivers/scsi/qla2xxx/qla_bsg.c
> index cd75b179410d..dba7bba788d7 100644
> --- a/drivers/scsi/qla2xxx/qla_bsg.c
> +++ b/drivers/scsi/qla2xxx/qla_bsg.c
> @@ -278,8 +278,8 @@ qla2x00_process_els(struct bsg_job *bsg_job)
> 	const char *type;
> 	int req_sg_cnt, rsp_sg_cnt;
> 	int rval =  (DID_ERROR << 16);
> -	uint16_t nextlid = 0;
> 	uint32_t els_cmd = 0;
> +	int qla_port_allocated = 0;
> 
> 	if (bsg_request->msgcode == FC_BSG_RPT_ELS) {
> 		rport = fc_bsg_to_rport(bsg_job);
> @@ -329,9 +329,9 @@ qla2x00_process_els(struct bsg_job *bsg_job)
> 		/* make sure the rport is logged in,
> 		 * if not perform fabric login
> 		 */
> -		if (qla2x00_fabric_login(vha, fcport, &nextlid)) {
> +		if (atomic_read(&fcport->state) != FCS_ONLINE) {
> 			ql_dbg(ql_dbg_user, vha, 0x7003,
> -			    "Failed to login port %06X for ELS passthru.\n",
> +			    "Port %06X is not online for ELS passthru.\n",
> 			    fcport->d_id.b24);
> 			rval = -EIO;
> 			goto done;
> @@ -348,6 +348,7 @@ qla2x00_process_els(struct bsg_job *bsg_job)
> 			goto done;
> 		}
> 
> +		qla_port_allocated = 1;
> 		/* Initialize all required  fields of fcport */
> 		fcport->vha = vha;
> 		fcport->d_id.b.al_pa =
> @@ -432,7 +433,7 @@ qla2x00_process_els(struct bsg_job *bsg_job)
> 	goto done_free_fcport;
> 
> done_free_fcport:
> -	if (bsg_request->msgcode != FC_BSG_RPT_ELS)
> +	if (qla_port_allocated)
> 		qla2x00_free_fcport(fcport);
> done:
> 	return rval;
> -- 
> 2.19.0.rc0
> 

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

Patch

diff --git a/drivers/scsi/qla2xxx/qla_bsg.c b/drivers/scsi/qla2xxx/qla_bsg.c
index cd75b179410d..dba7bba788d7 100644
--- a/drivers/scsi/qla2xxx/qla_bsg.c
+++ b/drivers/scsi/qla2xxx/qla_bsg.c
@@ -278,8 +278,8 @@  qla2x00_process_els(struct bsg_job *bsg_job)
 	const char *type;
 	int req_sg_cnt, rsp_sg_cnt;
 	int rval =  (DID_ERROR << 16);
-	uint16_t nextlid = 0;
 	uint32_t els_cmd = 0;
+	int qla_port_allocated = 0;
 
 	if (bsg_request->msgcode == FC_BSG_RPT_ELS) {
 		rport = fc_bsg_to_rport(bsg_job);
@@ -329,9 +329,9 @@  qla2x00_process_els(struct bsg_job *bsg_job)
 		/* make sure the rport is logged in,
 		 * if not perform fabric login
 		 */
-		if (qla2x00_fabric_login(vha, fcport, &nextlid)) {
+		if (atomic_read(&fcport->state) != FCS_ONLINE) {
 			ql_dbg(ql_dbg_user, vha, 0x7003,
-			    "Failed to login port %06X for ELS passthru.\n",
+			    "Port %06X is not online for ELS passthru.\n",
 			    fcport->d_id.b24);
 			rval = -EIO;
 			goto done;
@@ -348,6 +348,7 @@  qla2x00_process_els(struct bsg_job *bsg_job)
 			goto done;
 		}
 
+		qla_port_allocated = 1;
 		/* Initialize all required  fields of fcport */
 		fcport->vha = vha;
 		fcport->d_id.b.al_pa =
@@ -432,7 +433,7 @@  qla2x00_process_els(struct bsg_job *bsg_job)
 	goto done_free_fcport;
 
 done_free_fcport:
-	if (bsg_request->msgcode != FC_BSG_RPT_ELS)
+	if (qla_port_allocated)
 		qla2x00_free_fcport(fcport);
 done:
 	return rval;