diff mbox series

[6/7] qla2xxx: Fix point-to-point (N2N) device discovery issue

Message ID 20200928055023.3950-7-njavali@marvell.com
State New
Headers show
Series qla2xxx bug fixes | expand

Commit Message

Nilesh Javali Sept. 28, 2020, 5:50 a.m. UTC
From: Arun Easi <aeasi@marvell.com>

Driver was using a shorter timeout waiting for PLOGI from the
peer in point-to-point configurations. Some devices takes
some time (~4 seconds) to initiate the PLOGI. This peer
initiating PLOGI is when the peer has a higher P-WWN.

Increase the wait time based on N2N R_A_TOV.

Signed-off-by: Arun Easi <aeasi@marvell.com>
Signed-off-by: Nilesh Javali <njavali@marvell.com>
---
 drivers/scsi/qla2xxx/qla_def.h | 2 ++
 drivers/scsi/qla2xxx/qla_mbx.c | 3 ++-
 drivers/scsi/qla2xxx/qla_os.c  | 2 ++
 3 files changed, 6 insertions(+), 1 deletion(-)

Comments

Himanshu Madhani Sept. 28, 2020, 9:05 p.m. UTC | #1
On 9/28/20 12:50 AM, Nilesh Javali wrote:
> From: Arun Easi <aeasi@marvell.com>
> 
> Driver was using a shorter timeout waiting for PLOGI from the
> peer in point-to-point configurations. Some devices takes
> some time (~4 seconds) to initiate the PLOGI. This peer
> initiating PLOGI is when the peer has a higher P-WWN.
> 
> Increase the wait time based on N2N R_A_TOV.
> 
> Signed-off-by: Arun Easi <aeasi@marvell.com>
> Signed-off-by: Nilesh Javali <njavali@marvell.com>
> ---
>   drivers/scsi/qla2xxx/qla_def.h | 2 ++
>   drivers/scsi/qla2xxx/qla_mbx.c | 3 ++-
>   drivers/scsi/qla2xxx/qla_os.c  | 2 ++
>   3 files changed, 6 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h
> index 98814a9a8ea6..b0b4228050e9 100644
> --- a/drivers/scsi/qla2xxx/qla_def.h
> +++ b/drivers/scsi/qla2xxx/qla_def.h
> @@ -5147,6 +5147,8 @@ struct sff_8247_a0 {
>   	 ha->current_topology == ISP_CFG_N || \
>   	 !ha->current_topology)
>   
> +#define QLA_N2N_WAIT_TIME	5 /* 2 * ra_tov(n2n) + 1 */
> +
>   #define NVME_TYPE(fcport) \
>   	(fcport->fc4_type & FS_FC4TYPE_NVME) \
>   
> diff --git a/drivers/scsi/qla2xxx/qla_mbx.c b/drivers/scsi/qla2xxx/qla_mbx.c
> index d861d025bce1..d90880d5cf46 100644
> --- a/drivers/scsi/qla2xxx/qla_mbx.c
> +++ b/drivers/scsi/qla2xxx/qla_mbx.c
> @@ -3994,7 +3994,8 @@ qla24xx_report_id_acquisition(scsi_qla_host_t *vha,
>   
>   			if (fcport) {
>   				fcport->plogi_nack_done_deadline = jiffies + HZ;
> -				fcport->dm_login_expire = jiffies + 2*HZ;
> +				fcport->dm_login_expire = jiffies +
> +					QLA_N2N_WAIT_TIME * HZ;
>   				fcport->scan_state = QLA_FCPORT_FOUND;
>   				fcport->n2n_flag = 1;
>   				fcport->keep_nport_handle = 1;
> diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c
> index 6c4dc8eff8b8..b7a0feecac76 100644
> --- a/drivers/scsi/qla2xxx/qla_os.c
> +++ b/drivers/scsi/qla2xxx/qla_os.c
> @@ -5097,6 +5097,8 @@ void qla24xx_create_new_sess(struct scsi_qla_host *vha, struct qla_work_evt *e)
>   
>   			fcport->fc4_type = e->u.new_sess.fc4_type;
>   			if (e->u.new_sess.fc4_type & FS_FCP_IS_N2N) {
> +				fcport->dm_login_expire = jiffies +
> +					QLA_N2N_WAIT_TIME * HZ;
>   				fcport->fc4_type = FS_FC4TYPE_FCP;
>   				fcport->n2n_flag = 1;
>   				if (vha->flags.nvme_enabled)
> 

Looks Good.

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

Patch

diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h
index 98814a9a8ea6..b0b4228050e9 100644
--- a/drivers/scsi/qla2xxx/qla_def.h
+++ b/drivers/scsi/qla2xxx/qla_def.h
@@ -5147,6 +5147,8 @@  struct sff_8247_a0 {
 	 ha->current_topology == ISP_CFG_N || \
 	 !ha->current_topology)
 
+#define QLA_N2N_WAIT_TIME	5 /* 2 * ra_tov(n2n) + 1 */
+
 #define NVME_TYPE(fcport) \
 	(fcport->fc4_type & FS_FC4TYPE_NVME) \
 
diff --git a/drivers/scsi/qla2xxx/qla_mbx.c b/drivers/scsi/qla2xxx/qla_mbx.c
index d861d025bce1..d90880d5cf46 100644
--- a/drivers/scsi/qla2xxx/qla_mbx.c
+++ b/drivers/scsi/qla2xxx/qla_mbx.c
@@ -3994,7 +3994,8 @@  qla24xx_report_id_acquisition(scsi_qla_host_t *vha,
 
 			if (fcport) {
 				fcport->plogi_nack_done_deadline = jiffies + HZ;
-				fcport->dm_login_expire = jiffies + 2*HZ;
+				fcport->dm_login_expire = jiffies +
+					QLA_N2N_WAIT_TIME * HZ;
 				fcport->scan_state = QLA_FCPORT_FOUND;
 				fcport->n2n_flag = 1;
 				fcport->keep_nport_handle = 1;
diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c
index 6c4dc8eff8b8..b7a0feecac76 100644
--- a/drivers/scsi/qla2xxx/qla_os.c
+++ b/drivers/scsi/qla2xxx/qla_os.c
@@ -5097,6 +5097,8 @@  void qla24xx_create_new_sess(struct scsi_qla_host *vha, struct qla_work_evt *e)
 
 			fcport->fc4_type = e->u.new_sess.fc4_type;
 			if (e->u.new_sess.fc4_type & FS_FCP_IS_N2N) {
+				fcport->dm_login_expire = jiffies +
+					QLA_N2N_WAIT_TIME * HZ;
 				fcport->fc4_type = FS_FC4TYPE_FCP;
 				fcport->n2n_flag = 1;
 				if (vha->flags.nvme_enabled)