[PATCH 02/12] qla2xxx: Fix login retry count

2018-07-18 Thread Himanshu Madhani
From: Quinn Tran 

Login retry count was not properly decrementing,
which lead to endless login retry.

Signed-off-by: Quinn Tran 
Signed-off-by: Himanshu Madhani 
---
 drivers/scsi/qla2xxx/qla_gs.c | 16 +++
 drivers/scsi/qla2xxx/qla_init.c   | 23 +++---
 drivers/scsi/qla2xxx/qla_mbx.c|  1 +
 drivers/scsi/qla2xxx/qla_os.c | 90 ---
 drivers/scsi/qla2xxx/qla_target.c |  3 +-
 5 files changed, 70 insertions(+), 63 deletions(-)

diff --git a/drivers/scsi/qla2xxx/qla_gs.c b/drivers/scsi/qla2xxx/qla_gs.c
index 4bc2b66b299f..5139a3577bb3 100644
--- a/drivers/scsi/qla2xxx/qla_gs.c
+++ b/drivers/scsi/qla2xxx/qla_gs.c
@@ -3475,6 +3475,14 @@ void qla24xx_handle_gpnid_event(scsi_qla_host_t *vha, 
struct event_arg *ea)
fcport->rscn_gen++;
fcport->scan_state = QLA_FCPORT_FOUND;
fcport->flags |= FCF_FABRIC_DEVICE;
+   if (fcport->login_retry == 0) {
+   fcport->login_retry =
+   vha->hw->login_retry_count;
+   ql_dbg(ql_dbg_disc, vha, 0x,
+   "Port login retry %8phN, lid 0x%04x 
cnt=%d.\n",
+   fcport->port_name, fcport->loop_id,
+   fcport->login_retry);
+   }
switch (fcport->disc_state) {
case DSC_LOGIN_COMPLETE:
/* recheck session is still intact. */
@@ -3967,6 +3975,14 @@ void qla24xx_async_gnnft_done(scsi_qla_host_t *vha, 
srb_t *sp)
} else {
if (fcport->rscn_rcvd ||
fcport->disc_state != DSC_LOGIN_COMPLETE) {
+   if (fcport->login_retry == 0) {
+   fcport->login_retry =
+   vha->hw->login_retry_count;
+   ql_dbg(ql_dbg_disc, vha, 0x20a3,
+   "Port login retry %8phN, lid 0x%04x 
retry cnt=%d.\n",
+   fcport->port_name, fcport->loop_id,
+   fcport->login_retry);
+   }
fcport->rscn_rcvd = 0;
qla24xx_fcport_handle_login(vha, fcport);
}
diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c
index b85c7d311376..c58a6886fc43 100644
--- a/drivers/scsi/qla2xxx/qla_init.c
+++ b/drivers/scsi/qla2xxx/qla_init.c
@@ -213,8 +213,6 @@ qla2x00_async_login(struct scsi_qla_host *vha, fc_port_t 
*fcport,
if (fcport->fc4f_nvme)
lio->u.logio.flags |= SRB_LOGIN_SKIP_PRLI;
 
-   if (data[1] & QLA_LOGIO_LOGIN_RETRIED)
-   lio->u.logio.flags |= SRB_LOGIN_RETRIED;
}
 
rval = qla2x00_start_sp(sp);
@@ -485,7 +483,6 @@ static void qla24xx_handle_gnl_done_event(scsi_qla_host_t 
*vha,
 
if (ea->rc) { /* rval */
if (fcport->login_retry == 0) {
-   fcport->login_retry = vha->hw->login_retry_count;
ql_dbg(ql_dbg_disc, vha, 0x20de,
"GNL failed Port login retry %8phN, retry 
cnt=%d.\n",
fcport->port_name, fcport->login_retry);
@@ -1258,11 +1255,10 @@ int qla24xx_fcport_handle_login(struct scsi_qla_host 
*vha, fc_port_t *fcport)
return 0;
}
 
-   if (fcport->login_retry > 0)
-   fcport->login_retry--;
 
switch (fcport->disc_state) {
case DSC_DELETED:
+   fcport->login_retry--;
wwn = wwn_to_u64(fcport->node_name);
if (wwn == 0) {
ql_dbg(ql_dbg_disc, vha, 0x,
@@ -1275,6 +1271,7 @@ int qla24xx_fcport_handle_login(struct scsi_qla_host 
*vha, fc_port_t *fcport)
__func__, __LINE__, fcport->port_name);
qla24xx_post_gnl_work(vha, fcport);
} else {
+   fcport->login_retry--;
qla_chk_n2n_b4_login(vha, fcport);
}
break;
@@ -1291,6 +1288,7 @@ int qla24xx_fcport_handle_login(struct scsi_qla_host 
*vha, fc_port_t *fcport)
break;
 
case DSC_LOGIN_FAILED:
+   fcport->login_retry--;
ql_dbg(ql_dbg_disc, vha, 0x20d0,
"%s %d %8phC post gidpn\n",
__func__, __LINE__, fcport->port_name);
@@ -1305,6 +1303,7 @@ int qla24xx_fcport_handle_login(struct scsi_qla_host 
*vha, fc_port_t *fcport)
ql_dbg(ql_dbg_disc, vha, 0x20d1,
"%s %d %8phC post adisc\n",
__func__, 

[PATCH 02/12] qla2xxx: Fix login retry count

2018-06-06 Thread Himanshu Madhani
From: Quinn Tran 

Login retry count was not properly decrementing,
which lead to endless login retry.

Signed-off-by: Quinn Tran 
Signed-off-by: Himanshu Madhani 
---
 drivers/scsi/qla2xxx/qla_gs.c | 16 +++
 drivers/scsi/qla2xxx/qla_init.c   | 23 +++---
 drivers/scsi/qla2xxx/qla_mbx.c|  1 +
 drivers/scsi/qla2xxx/qla_os.c | 90 ---
 drivers/scsi/qla2xxx/qla_target.c |  3 +-
 5 files changed, 70 insertions(+), 63 deletions(-)

diff --git a/drivers/scsi/qla2xxx/qla_gs.c b/drivers/scsi/qla2xxx/qla_gs.c
index 4bc2b66b299f..5139a3577bb3 100644
--- a/drivers/scsi/qla2xxx/qla_gs.c
+++ b/drivers/scsi/qla2xxx/qla_gs.c
@@ -3475,6 +3475,14 @@ void qla24xx_handle_gpnid_event(scsi_qla_host_t *vha, 
struct event_arg *ea)
fcport->rscn_gen++;
fcport->scan_state = QLA_FCPORT_FOUND;
fcport->flags |= FCF_FABRIC_DEVICE;
+   if (fcport->login_retry == 0) {
+   fcport->login_retry =
+   vha->hw->login_retry_count;
+   ql_dbg(ql_dbg_disc, vha, 0x,
+   "Port login retry %8phN, lid 0x%04x 
cnt=%d.\n",
+   fcport->port_name, fcport->loop_id,
+   fcport->login_retry);
+   }
switch (fcport->disc_state) {
case DSC_LOGIN_COMPLETE:
/* recheck session is still intact. */
@@ -3967,6 +3975,14 @@ void qla24xx_async_gnnft_done(scsi_qla_host_t *vha, 
srb_t *sp)
} else {
if (fcport->rscn_rcvd ||
fcport->disc_state != DSC_LOGIN_COMPLETE) {
+   if (fcport->login_retry == 0) {
+   fcport->login_retry =
+   vha->hw->login_retry_count;
+   ql_dbg(ql_dbg_disc, vha, 0x20a3,
+   "Port login retry %8phN, lid 0x%04x 
retry cnt=%d.\n",
+   fcport->port_name, fcport->loop_id,
+   fcport->login_retry);
+   }
fcport->rscn_rcvd = 0;
qla24xx_fcport_handle_login(vha, fcport);
}
diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c
index b85c7d311376..c58a6886fc43 100644
--- a/drivers/scsi/qla2xxx/qla_init.c
+++ b/drivers/scsi/qla2xxx/qla_init.c
@@ -213,8 +213,6 @@ qla2x00_async_login(struct scsi_qla_host *vha, fc_port_t 
*fcport,
if (fcport->fc4f_nvme)
lio->u.logio.flags |= SRB_LOGIN_SKIP_PRLI;
 
-   if (data[1] & QLA_LOGIO_LOGIN_RETRIED)
-   lio->u.logio.flags |= SRB_LOGIN_RETRIED;
}
 
rval = qla2x00_start_sp(sp);
@@ -485,7 +483,6 @@ static void qla24xx_handle_gnl_done_event(scsi_qla_host_t 
*vha,
 
if (ea->rc) { /* rval */
if (fcport->login_retry == 0) {
-   fcport->login_retry = vha->hw->login_retry_count;
ql_dbg(ql_dbg_disc, vha, 0x20de,
"GNL failed Port login retry %8phN, retry 
cnt=%d.\n",
fcport->port_name, fcport->login_retry);
@@ -1258,11 +1255,10 @@ int qla24xx_fcport_handle_login(struct scsi_qla_host 
*vha, fc_port_t *fcport)
return 0;
}
 
-   if (fcport->login_retry > 0)
-   fcport->login_retry--;
 
switch (fcport->disc_state) {
case DSC_DELETED:
+   fcport->login_retry--;
wwn = wwn_to_u64(fcport->node_name);
if (wwn == 0) {
ql_dbg(ql_dbg_disc, vha, 0x,
@@ -1275,6 +1271,7 @@ int qla24xx_fcport_handle_login(struct scsi_qla_host 
*vha, fc_port_t *fcport)
__func__, __LINE__, fcport->port_name);
qla24xx_post_gnl_work(vha, fcport);
} else {
+   fcport->login_retry--;
qla_chk_n2n_b4_login(vha, fcport);
}
break;
@@ -1291,6 +1288,7 @@ int qla24xx_fcport_handle_login(struct scsi_qla_host 
*vha, fc_port_t *fcport)
break;
 
case DSC_LOGIN_FAILED:
+   fcport->login_retry--;
ql_dbg(ql_dbg_disc, vha, 0x20d0,
"%s %d %8phC post gidpn\n",
__func__, __LINE__, fcport->port_name);
@@ -1305,6 +1303,7 @@ int qla24xx_fcport_handle_login(struct scsi_qla_host 
*vha, fc_port_t *fcport)
ql_dbg(ql_dbg_disc, vha, 0x20d1,
"%s %d %8phC post adisc\n",
__func__,