All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 00/22]  qla2xxx: Bug fixes for 4.15-rc2
@ 2017-11-30  3:40 Himanshu Madhani
  2017-11-30  3:40 ` [PATCH v2 01/22] qla2xxx: Fix system crash for Notify ack timeout handling Himanshu Madhani
                   ` (21 more replies)
  0 siblings, 22 replies; 47+ messages in thread
From: Himanshu Madhani @ 2017-11-30  3:40 UTC (permalink / raw)
  To: James.Bottomley, martin.petersen; +Cc: himanshu.madhani, linux-scsi

Hi Martin,

This series contains bug fixes discovered during error handling test
cases for large fabric.

Please apply this series to 4.15-rc2 at your earliest convenience.

Changes from v1 -> v2

o Updated patch description for patch 14 as per Bart's suggestion.

Thanks,
Himanshu

Giridhar Malavali (2):
  qla2xxx: Defer processing of GS IOCB calls
  qla2xxx: Remove aborting ELS IOCB call issued as part of timeout.

Himanshu Madhani (2):
  qla2xxx: Fix memory leak in dual/target mode
  qla2xxx: Update driver version to 10.00.00.03-k

Quinn Tran (17):
  qla2xxx: Fix system crash for Notify ack timeout handling
  qla2xxx: Fix gpnid error processing
  qla2xxx: Move session delete to driver work queue
  qla2xxx: Skip IRQ affinity for Target QPairs
  qla2xxx: Fix re-login for Nport Handle in use
  qla2xxx: Retry switch command on time out
  qla2xxx: Serialize GPNID for multiple RSCN
  qla2xxx: Fix login state machine stuck at GPDB
  qla2xxx: Relogin to target port on a cable swap
  qla2xxx: Fix Relogin being triggered too fast
  qla2xxx: Clear send ELS LOGO flag after target re-login
  qla2xxx: Fix PRLI state check
  qla2xxx: Fix abort command deadlock due to spinlock
  qla2xxx: Replace fcport alloc with qla2x00_alloc_fcport
  qla2xxx: Fix scan state field for fcport
  qla2xxx: Clear loop id after delete
  qla2xxx: Fix system crash in qlt_plogi_ack_unref

Sawan Chandak (1):
  qla2xxx: Fix NPIV host cleanup in target mode

 drivers/scsi/qla2xxx/qla_def.h     |  49 ++++----
 drivers/scsi/qla2xxx/qla_gs.c      | 230 ++++++++++++++++++++++++++++++-------
 drivers/scsi/qla2xxx/qla_init.c    |  69 +++++++++--
 drivers/scsi/qla2xxx/qla_iocb.c    |  13 ---
 drivers/scsi/qla2xxx/qla_isr.c     |   7 +-
 drivers/scsi/qla2xxx/qla_mbx.c     |   3 +-
 drivers/scsi/qla2xxx/qla_mid.c     |  42 ++++---
 drivers/scsi/qla2xxx/qla_os.c      |  78 ++++++++++---
 drivers/scsi/qla2xxx/qla_target.c  |  60 +++++++---
 drivers/scsi/qla2xxx/qla_version.h |   2 +-
 10 files changed, 405 insertions(+), 148 deletions(-)

-- 
2.12.0

^ permalink raw reply	[flat|nested] 47+ messages in thread

* [PATCH v2 01/22] qla2xxx: Fix system crash for Notify ack timeout handling
  2017-11-30  3:40 [PATCH v2 00/22] qla2xxx: Bug fixes for 4.15-rc2 Himanshu Madhani
@ 2017-11-30  3:40 ` Himanshu Madhani
  2017-11-30 15:47   ` Hannes Reinecke
  2017-11-30  3:40 ` [PATCH v2 02/22] qla2xxx: Fix gpnid error processing Himanshu Madhani
                   ` (20 subsequent siblings)
  21 siblings, 1 reply; 47+ messages in thread
From: Himanshu Madhani @ 2017-11-30  3:40 UTC (permalink / raw)
  To: James.Bottomley, martin.petersen; +Cc: himanshu.madhani, linux-scsi

From: Quinn Tran <quinn.tran@cavium.com>

Fix NULL pointer crash due to missing timeout handling callback
for Notify Ack IOCB.

Fixes: 726b85487067d ("qla2xxx: Add framework for async fabric discovery")
Cc: <stable@vger.kernel.org> # 4.10+
Signed-off-by: Quinn Tran <quinn.tran@cavium.com>
Signed-off-by: Himanshu Madhani <himanshu.madhani@cavium.com>
---
 drivers/scsi/qla2xxx/qla_target.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c
index 18069edd4773..1259ec85ec0a 100644
--- a/drivers/scsi/qla2xxx/qla_target.c
+++ b/drivers/scsi/qla2xxx/qla_target.c
@@ -665,7 +665,7 @@ int qla24xx_async_notify_ack(scsi_qla_host_t *vha, fc_port_t *fcport,
 	qla2x00_init_timer(sp, qla2x00_get_async_timeout(vha)+2);
 
 	sp->u.iocb_cmd.u.nack.ntfy = ntfy;
-
+	sp->u.iocb_cmd.timeout = qla2x00_async_iocb_timeout;
 	sp->done = qla2x00_async_nack_sp_done;
 
 	rval = qla2x00_start_sp(sp);
-- 
2.12.0

^ permalink raw reply related	[flat|nested] 47+ messages in thread

* [PATCH v2 02/22] qla2xxx: Fix gpnid error processing
  2017-11-30  3:40 [PATCH v2 00/22] qla2xxx: Bug fixes for 4.15-rc2 Himanshu Madhani
  2017-11-30  3:40 ` [PATCH v2 01/22] qla2xxx: Fix system crash for Notify ack timeout handling Himanshu Madhani
@ 2017-11-30  3:40 ` Himanshu Madhani
  2017-11-30 15:48   ` Hannes Reinecke
  2017-11-30  3:40 ` [PATCH v2 03/22] qla2xxx: Move session delete to driver work queue Himanshu Madhani
                   ` (19 subsequent siblings)
  21 siblings, 1 reply; 47+ messages in thread
From: Himanshu Madhani @ 2017-11-30  3:40 UTC (permalink / raw)
  To: James.Bottomley, martin.petersen; +Cc: himanshu.madhani, linux-scsi

From: Quinn Tran <quinn.tran@cavium.com>

Stop GPNID command from advancing if command has failed.

Fixes: 726b85487067d ("qla2xxx: Add framework for async fabric discovery")
Cc: <stable@vger.kernel.org> # 4.10+
Signed-off-by: Quinn Tran <quinn.tran@cavium.com>
Signed-off-by: Himanshu Madhani <himanshu.madhani@cavium.com>
---
 drivers/scsi/qla2xxx/qla_gs.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/drivers/scsi/qla2xxx/qla_gs.c b/drivers/scsi/qla2xxx/qla_gs.c
index bc3db6abc9a0..ddc69d36877e 100644
--- a/drivers/scsi/qla2xxx/qla_gs.c
+++ b/drivers/scsi/qla2xxx/qla_gs.c
@@ -3211,6 +3211,11 @@ static void qla2x00_async_gpnid_sp_done(void *s, int res)
 	    sp->name, res, ct_req->req.port_id.port_id,
 	    ct_rsp->rsp.gpn_id.port_name);
 
+	if (res) {
+		sp->free(sp);
+		return;
+	}
+
 	memset(&ea, 0, sizeof(ea));
 	memcpy(ea.port_name, ct_rsp->rsp.gpn_id.port_name, WWN_SIZE);
 	ea.sp = sp;
-- 
2.12.0

^ permalink raw reply related	[flat|nested] 47+ messages in thread

* [PATCH v2 03/22] qla2xxx: Move session delete to driver work queue
  2017-11-30  3:40 [PATCH v2 00/22] qla2xxx: Bug fixes for 4.15-rc2 Himanshu Madhani
  2017-11-30  3:40 ` [PATCH v2 01/22] qla2xxx: Fix system crash for Notify ack timeout handling Himanshu Madhani
  2017-11-30  3:40 ` [PATCH v2 02/22] qla2xxx: Fix gpnid error processing Himanshu Madhani
@ 2017-11-30  3:40 ` Himanshu Madhani
  2017-11-30 15:48   ` Hannes Reinecke
  2017-11-30  3:40 ` [PATCH v2 04/22] qla2xxx: Skip IRQ affinity for Target QPairs Himanshu Madhani
                   ` (18 subsequent siblings)
  21 siblings, 1 reply; 47+ messages in thread
From: Himanshu Madhani @ 2017-11-30  3:40 UTC (permalink / raw)
  To: James.Bottomley, martin.petersen; +Cc: himanshu.madhani, linux-scsi

From: Quinn Tran <quinn.tran@cavium.com>

Move session delete from system work queue to driver's
work queue for in time processing.

Fixes: 726b85487067d ("qla2xxx: Add framework for async fabric discovery")
Cc: <stable@vger.kernel.org> # 4.10+
Signed-off-by: Quinn Tran <quinn.tran@cavium.com>
Signed-off-by: Himanshu Madhani <himanshu.madhani@cavium.com>
---
 drivers/scsi/qla2xxx/qla_os.c     | 3 ++-
 drivers/scsi/qla2xxx/qla_target.c | 3 ++-
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c
index 46f2d0cf7c0d..dfbf82e716b0 100644
--- a/drivers/scsi/qla2xxx/qla_os.c
+++ b/drivers/scsi/qla2xxx/qla_os.c
@@ -3193,10 +3193,11 @@ qla2x00_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)
 	    host->can_queue, base_vha->req,
 	    base_vha->mgmt_svr_loop_id, host->sg_tablesize);
 
+	ha->wq = alloc_workqueue("qla2xxx_wq", WQ_MEM_RECLAIM, 0);
+
 	if (ha->mqenable) {
 		bool mq = false;
 		bool startit = false;
-		ha->wq = alloc_workqueue("qla2xxx_wq", WQ_MEM_RECLAIM, 0);
 
 		if (QLA_TGT_MODE_ENABLED()) {
 			mq = true;
diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c
index 1259ec85ec0a..924d58f5408f 100644
--- a/drivers/scsi/qla2xxx/qla_target.c
+++ b/drivers/scsi/qla2xxx/qla_target.c
@@ -1205,7 +1205,8 @@ void qlt_schedule_sess_for_deletion(struct fc_port *sess,
 	ql_dbg(ql_dbg_tgt, sess->vha, 0xe001,
 	    "Scheduling sess %p for deletion\n", sess);
 
-	schedule_work(&sess->del_work);
+	INIT_WORK(&sess->del_work, qla24xx_delete_sess_fn);
+	queue_work(sess->vha->hw->wq, &sess->del_work);
 }
 
 void qlt_schedule_sess_for_deletion_lock(struct fc_port *sess)
-- 
2.12.0

^ permalink raw reply related	[flat|nested] 47+ messages in thread

* [PATCH v2 04/22] qla2xxx: Skip IRQ affinity for Target QPairs
  2017-11-30  3:40 [PATCH v2 00/22] qla2xxx: Bug fixes for 4.15-rc2 Himanshu Madhani
                   ` (2 preceding siblings ...)
  2017-11-30  3:40 ` [PATCH v2 03/22] qla2xxx: Move session delete to driver work queue Himanshu Madhani
@ 2017-11-30  3:40 ` Himanshu Madhani
  2017-11-30 15:49   ` Hannes Reinecke
  2017-11-30  3:40 ` [PATCH v2 05/22] qla2xxx: Fix re-login for Nport Handle in use Himanshu Madhani
                   ` (17 subsequent siblings)
  21 siblings, 1 reply; 47+ messages in thread
From: Himanshu Madhani @ 2017-11-30  3:40 UTC (permalink / raw)
  To: James.Bottomley, martin.petersen; +Cc: himanshu.madhani, linux-scsi

From: Quinn Tran <quinn.tran@cavium.com>

Fix co-existence between Block MQ and Target Mode. Block MQ
and initiator mode requires midlayer queue mapping to check
for IRQ to be affinitize. For target mode, it's not the case.

Fixes: 09620eeb62c41 ("scsi: qla2xxx: Add debug knob for user control workload")
Cc: <stable@vger.kernel.org> # 4.12+
Signed-off-by: Quinn Tran <quinn.tran@cavium.com>
Signed-off-by: Himanshu Madhani <himanshu.madhani@cavium.com>
---
 drivers/scsi/qla2xxx/qla_os.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c
index dfbf82e716b0..428e1bfaa83b 100644
--- a/drivers/scsi/qla2xxx/qla_os.c
+++ b/drivers/scsi/qla2xxx/qla_os.c
@@ -6609,9 +6609,14 @@ qla83xx_disable_laser(scsi_qla_host_t *vha)
 
 static int qla2xxx_map_queues(struct Scsi_Host *shost)
 {
+	int rc;
 	scsi_qla_host_t *vha = (scsi_qla_host_t *)shost->hostdata;
 
-	return blk_mq_pci_map_queues(&shost->tag_set, vha->hw->pdev);
+	if (USER_CTRL_IRQ(vha->hw))
+		rc = blk_mq_map_queues(&shost->tag_set);
+	else
+		rc = blk_mq_pci_map_queues(&shost->tag_set, vha->hw->pdev);
+	return rc;
 }
 
 static const struct pci_error_handlers qla2xxx_err_handler = {
-- 
2.12.0

^ permalink raw reply related	[flat|nested] 47+ messages in thread

* [PATCH v2 05/22] qla2xxx: Fix re-login for Nport Handle in use
  2017-11-30  3:40 [PATCH v2 00/22] qla2xxx: Bug fixes for 4.15-rc2 Himanshu Madhani
                   ` (3 preceding siblings ...)
  2017-11-30  3:40 ` [PATCH v2 04/22] qla2xxx: Skip IRQ affinity for Target QPairs Himanshu Madhani
@ 2017-11-30  3:40 ` Himanshu Madhani
  2017-11-30 15:51   ` Hannes Reinecke
  2017-11-30  3:40 ` [PATCH v2 06/22] qla2xxx: Retry switch command on time out Himanshu Madhani
                   ` (16 subsequent siblings)
  21 siblings, 1 reply; 47+ messages in thread
From: Himanshu Madhani @ 2017-11-30  3:40 UTC (permalink / raw)
  To: James.Bottomley, martin.petersen; +Cc: himanshu.madhani, linux-scsi

From: Quinn Tran <quinn.tran@cavium.com>

When NPort Handle is in use, driver needs to mark the handle
as used and pick another. Instead, the code clears the handle
and re-pick the same handle.

Fixes: 726b85487067d ("qla2xxx: Add framework for async fabric discovery")
Cc: <stable@vger.kernel.org> # 4.10+
Signed-off-by: Quinn Tran <quinn.tran@cavium.com>
Signed-off-by: Himanshu Madhani <himanshu.madhani@cavium.com>
---
 drivers/scsi/qla2xxx/qla_gs.c   | 16 ++++++++++-----
 drivers/scsi/qla2xxx/qla_init.c | 44 +++++++++++++++++++++++++++++++++++++----
 drivers/scsi/qla2xxx/qla_isr.c  |  5 -----
 3 files changed, 51 insertions(+), 14 deletions(-)

diff --git a/drivers/scsi/qla2xxx/qla_gs.c b/drivers/scsi/qla2xxx/qla_gs.c
index ddc69d36877e..8984f857bb34 100644
--- a/drivers/scsi/qla2xxx/qla_gs.c
+++ b/drivers/scsi/qla2xxx/qla_gs.c
@@ -2833,7 +2833,7 @@ void qla24xx_handle_gidpn_event(scsi_qla_host_t *vha, struct event_arg *ea)
 				}
 			} else { /* fcport->d_id.b24 != ea->id.b24 */
 				fcport->d_id.b24 = ea->id.b24;
-				if (fcport->deleted == QLA_SESS_DELETED) {
+				if (fcport->deleted != QLA_SESS_DELETED) {
 					ql_dbg(ql_dbg_disc, vha, 0x2021,
 					    "%s %d %8phC post del sess\n",
 					    __func__, __LINE__, fcport->port_name);
@@ -3206,10 +3206,16 @@ static void qla2x00_async_gpnid_sp_done(void *s, int res)
 	struct event_arg ea;
 	struct qla_work_evt *e;
 
-	ql_dbg(ql_dbg_disc, vha, 0x2066,
-	    "Async done-%s res %x ID %3phC. %8phC\n",
-	    sp->name, res, ct_req->req.port_id.port_id,
-	    ct_rsp->rsp.gpn_id.port_name);
+	if (res)
+		ql_dbg(ql_dbg_disc, vha, 0x2066,
+		    "Async done-%s fail res %x ID %3phC. %8phC\n",
+		    sp->name, res, ct_req->req.port_id.port_id,
+		    ct_rsp->rsp.gpn_id.port_name);
+	else
+		ql_dbg(ql_dbg_disc, vha, 0x2066,
+		    "Async done-%s good ID %3phC. %8phC\n",
+		    sp->name, ct_req->req.port_id.port_id,
+		    ct_rsp->rsp.gpn_id.port_name);
 
 	if (res) {
 		sp->free(sp);
diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c
index 1bafa043f9f1..be4c67b465b8 100644
--- a/drivers/scsi/qla2xxx/qla_init.c
+++ b/drivers/scsi/qla2xxx/qla_init.c
@@ -1452,6 +1452,8 @@ static void
 qla24xx_handle_plogi_done_event(struct scsi_qla_host *vha, struct event_arg *ea)
 {
 	port_id_t cid;	/* conflict Nport id */
+	u16 lid;
+	struct fc_port *conflict_fcport;
 
 	switch (ea->data[0]) {
 	case MBS_COMMAND_COMPLETE:
@@ -1467,8 +1469,12 @@ qla24xx_handle_plogi_done_event(struct scsi_qla_host *vha, struct event_arg *ea)
 			qla24xx_post_prli_work(vha, ea->fcport);
 		} else {
 			ql_dbg(ql_dbg_disc, vha, 0x20ea,
-				"%s %d %8phC post gpdb\n",
-				__func__, __LINE__, ea->fcport->port_name);
+			    "%s %d %8phC LoopID 0x%x in use with %06x. post gnl\n",
+			    __func__, __LINE__, ea->fcport->port_name,
+			    ea->fcport->loop_id, ea->fcport->d_id.b24);
+
+			set_bit(ea->fcport->loop_id, vha->hw->loop_id_map);
+			ea->fcport->loop_id = FC_NO_LOOP_ID;
 			ea->fcport->chip_reset = vha->hw->base_qpair->chip_reset;
 			ea->fcport->logout_on_delete = 1;
 			ea->fcport->send_els_logo = 0;
@@ -1513,8 +1519,38 @@ qla24xx_handle_plogi_done_event(struct scsi_qla_host *vha, struct event_arg *ea)
 		    ea->fcport->d_id.b.domain, ea->fcport->d_id.b.area,
 		    ea->fcport->d_id.b.al_pa);
 
-		qla2x00_clear_loop_id(ea->fcport);
-		qla24xx_post_gidpn_work(vha, ea->fcport);
+		lid = ea->iop[1] & 0xffff;
+		qlt_find_sess_invalidate_other(vha,
+		    wwn_to_u64(ea->fcport->port_name),
+		    ea->fcport->d_id, lid, &conflict_fcport);
+
+		if (conflict_fcport) {
+			/*
+			 * Another fcport share the same loop_id/nport id.
+			 * Conflict fcport needs to finish cleanup before this
+			 * fcport can proceed to login.
+			 */
+			conflict_fcport->conflict = ea->fcport;
+			ea->fcport->login_pause = 1;
+
+			ql_dbg(ql_dbg_disc, vha, 0x20ed,
+			    "%s %d %8phC NPortId %06x inuse with loopid 0x%x. post gidpn\n",
+			    __func__, __LINE__, ea->fcport->port_name,
+			    ea->fcport->d_id.b24, lid);
+			qla2x00_clear_loop_id(ea->fcport);
+			qla24xx_post_gidpn_work(vha, ea->fcport);
+		} else {
+			ql_dbg(ql_dbg_disc, vha, 0x20ed,
+			    "%s %d %8phC NPortId %06x inuse with loopid 0x%x. sched delete\n",
+			    __func__, __LINE__, ea->fcport->port_name,
+			    ea->fcport->d_id.b24, lid);
+
+			qla2x00_clear_loop_id(ea->fcport);
+			set_bit(lid, vha->hw->loop_id_map);
+			ea->fcport->loop_id = lid;
+			ea->fcport->keep_nport_handle = 0;
+			qlt_schedule_sess_for_deletion(ea->fcport, false);
+		}
 		break;
 	}
 	return;
diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c
index 2fd79129bb2a..545c527263d0 100644
--- a/drivers/scsi/qla2xxx/qla_isr.c
+++ b/drivers/scsi/qla2xxx/qla_isr.c
@@ -2369,7 +2369,6 @@ qla2x00_status_entry(scsi_qla_host_t *vha, struct rsp_que *rsp, void *pkt)
 	int res = 0;
 	uint16_t state_flags = 0;
 	uint16_t retry_delay = 0;
-	uint8_t no_logout = 0;
 
 	sts = (sts_entry_t *) pkt;
 	sts24 = (struct sts_entry_24xx *) pkt;
@@ -2640,7 +2639,6 @@ qla2x00_status_entry(scsi_qla_host_t *vha, struct rsp_que *rsp, void *pkt)
 		break;
 
 	case CS_PORT_LOGGED_OUT:
-		no_logout = 1;
 	case CS_PORT_CONFIG_CHG:
 	case CS_PORT_BUSY:
 	case CS_INCOMPLETE:
@@ -2671,9 +2669,6 @@ qla2x00_status_entry(scsi_qla_host_t *vha, struct rsp_que *rsp, void *pkt)
 				port_state_str[atomic_read(&fcport->state)],
 				comp_status);
 
-			if (no_logout)
-				fcport->logout_on_delete = 0;
-
 			qla2x00_mark_device_lost(fcport->vha, fcport, 1, 1);
 			qlt_schedule_sess_for_deletion_lock(fcport);
 		}
-- 
2.12.0

^ permalink raw reply related	[flat|nested] 47+ messages in thread

* [PATCH v2 06/22] qla2xxx: Retry switch command on time out
  2017-11-30  3:40 [PATCH v2 00/22] qla2xxx: Bug fixes for 4.15-rc2 Himanshu Madhani
                   ` (4 preceding siblings ...)
  2017-11-30  3:40 ` [PATCH v2 05/22] qla2xxx: Fix re-login for Nport Handle in use Himanshu Madhani
@ 2017-11-30  3:40 ` Himanshu Madhani
  2017-11-30 15:52   ` Hannes Reinecke
  2017-11-30  3:40 ` [PATCH v2 07/22] qla2xxx: Serialize GPNID for multiple RSCN Himanshu Madhani
                   ` (15 subsequent siblings)
  21 siblings, 1 reply; 47+ messages in thread
From: Himanshu Madhani @ 2017-11-30  3:40 UTC (permalink / raw)
  To: James.Bottomley, martin.petersen; +Cc: himanshu.madhani, linux-scsi

From: Quinn Tran <quinn.tran@cavium.com>

Retry GID_PN & GPN_ID switch commands for time out case.

Fixes: 726b85487067d ("qla2xxx: Add framework for async fabric discovery")
Cc: <stable@vger.kernel.org> # 4.10+
Signed-off-by: Quinn Tran <quinn.tran@cavium.com>
Signed-off-by: Himanshu Madhani <himanshu.madhani@cavium.com>
---
 drivers/scsi/qla2xxx/qla_gs.c | 34 ++++++++++++++++++++++++++--------
 1 file changed, 26 insertions(+), 8 deletions(-)

diff --git a/drivers/scsi/qla2xxx/qla_gs.c b/drivers/scsi/qla2xxx/qla_gs.c
index 8984f857bb34..ea1b562ebc8a 100644
--- a/drivers/scsi/qla2xxx/qla_gs.c
+++ b/drivers/scsi/qla2xxx/qla_gs.c
@@ -175,6 +175,9 @@ qla2x00_chk_ms_status(scsi_qla_host_t *vha, ms_iocb_entry_t *ms_pkt,
 				set_bit(LOCAL_LOOP_UPDATE, &vha->dpc_flags);
 			}
 			break;
+		case CS_TIMEOUT:
+			rval = QLA_FUNCTION_TIMEOUT;
+			/* drop through */
 		default:
 			ql_dbg(ql_dbg_disc, vha, 0x2033,
 			    "%s failed, completion status (%x) on port_id: "
@@ -2889,9 +2892,22 @@ static void qla2x00_async_gidpn_sp_done(void *s, int res)
 	ea.rc = res;
 	ea.event = FCME_GIDPN_DONE;
 
-	ql_dbg(ql_dbg_disc, vha, 0x204f,
-	    "Async done-%s res %x, WWPN %8phC ID %3phC \n",
-	    sp->name, res, fcport->port_name, id);
+	if (res == QLA_FUNCTION_TIMEOUT) {
+		ql_dbg(ql_dbg_disc, sp->vha, 0xffff,
+		    "Async done-%s WWPN %8phC timed out.\n",
+		    sp->name, fcport->port_name);
+		qla24xx_post_gidpn_work(sp->vha, fcport);
+		sp->free(sp);
+		return;
+	} else if (res) {
+		ql_dbg(ql_dbg_disc, sp->vha, 0xffff,
+		    "Async done-%s fail res %x, WWPN %8phC\n",
+		    sp->name, res, fcport->port_name);
+	} else {
+		ql_dbg(ql_dbg_disc, vha, 0x204f,
+		    "Async done-%s good WWPN %8phC ID %3phC\n",
+		    sp->name, fcport->port_name, id);
+	}
 
 	qla2x00_fcport_event_handler(vha, &ea);
 
@@ -3217,11 +3233,6 @@ static void qla2x00_async_gpnid_sp_done(void *s, int res)
 		    sp->name, ct_req->req.port_id.port_id,
 		    ct_rsp->rsp.gpn_id.port_name);
 
-	if (res) {
-		sp->free(sp);
-		return;
-	}
-
 	memset(&ea, 0, sizeof(ea));
 	memcpy(ea.port_name, ct_rsp->rsp.gpn_id.port_name, WWN_SIZE);
 	ea.sp = sp;
@@ -3231,6 +3242,13 @@ static void qla2x00_async_gpnid_sp_done(void *s, int res)
 	ea.rc = res;
 	ea.event = FCME_GPNID_DONE;
 
+	if (res) {
+		if (res == QLA_FUNCTION_TIMEOUT)
+			qla24xx_post_gpnid_work(sp->vha, &ea.id);
+		sp->free(sp);
+		return;
+	}
+
 	qla2x00_fcport_event_handler(vha, &ea);
 
 	e = qla2x00_alloc_work(vha, QLA_EVT_GPNID_DONE);
-- 
2.12.0

^ permalink raw reply related	[flat|nested] 47+ messages in thread

* [PATCH v2 07/22] qla2xxx: Serialize GPNID for multiple RSCN
  2017-11-30  3:40 [PATCH v2 00/22] qla2xxx: Bug fixes for 4.15-rc2 Himanshu Madhani
                   ` (5 preceding siblings ...)
  2017-11-30  3:40 ` [PATCH v2 06/22] qla2xxx: Retry switch command on time out Himanshu Madhani
@ 2017-11-30  3:40 ` Himanshu Madhani
  2017-11-30 15:53   ` Hannes Reinecke
  2017-11-30  3:40 ` [PATCH v2 08/22] qla2xxx: Fix login state machine stuck at GPDB Himanshu Madhani
                   ` (14 subsequent siblings)
  21 siblings, 1 reply; 47+ messages in thread
From: Himanshu Madhani @ 2017-11-30  3:40 UTC (permalink / raw)
  To: James.Bottomley, martin.petersen; +Cc: himanshu.madhani, linux-scsi

From: Quinn Tran <quinn.tran@cavium.com>

GPNID is triggered by RSCN. For multiple RSCNs of the same
affected NPORT ID, serialize the GPNID to prevent confusion.

Fixes: 726b85487067d ("qla2xxx: Add framework for async fabric discovery")
Cc: <stable@vger.kernel.org> # 4.10+
Signed-off-by: Quinn Tran <quinn.tran@cavium.com>
Signed-off-by: Himanshu Madhani <himanshu.madhani@cavium.com>
---
 drivers/scsi/qla2xxx/qla_def.h | 48 +++++++++++++++++++++++-------------------
 drivers/scsi/qla2xxx/qla_gs.c  | 35 +++++++++++++++++++++++++-----
 drivers/scsi/qla2xxx/qla_isr.c |  2 +-
 drivers/scsi/qla2xxx/qla_os.c  |  1 +
 4 files changed, 58 insertions(+), 28 deletions(-)

diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h
index 01a9b8971e88..d9b4a0651a0f 100644
--- a/drivers/scsi/qla2xxx/qla_def.h
+++ b/drivers/scsi/qla2xxx/qla_def.h
@@ -315,6 +315,29 @@ struct srb_cmd {
 /* To identify if a srb is of T10-CRC type. @sp => srb_t pointer */
 #define IS_PROT_IO(sp)	(sp->flags & SRB_CRC_CTX_DSD_VALID)
 
+/*
+ * 24 bit port ID type definition.
+ */
+typedef union {
+	uint32_t b24 : 24;
+
+	struct {
+#ifdef __BIG_ENDIAN
+		uint8_t domain;
+		uint8_t area;
+		uint8_t al_pa;
+#elif defined(__LITTLE_ENDIAN)
+		uint8_t al_pa;
+		uint8_t area;
+		uint8_t domain;
+#else
+#error "__BIG_ENDIAN or __LITTLE_ENDIAN must be defined!"
+#endif
+		uint8_t rsvd_1;
+	} b;
+} port_id_t;
+#define INVALID_PORT_ID	0xFFFFFF
+
 struct els_logo_payload {
 	uint8_t opcode;
 	uint8_t rsvd[3];
@@ -338,6 +361,7 @@ struct ct_arg {
 	u32		rsp_size;
 	void		*req;
 	void		*rsp;
+	port_id_t	id;
 };
 
 /*
@@ -499,6 +523,7 @@ typedef struct srb {
 	const char *name;
 	int iocbs;
 	struct qla_qpair *qpair;
+	struct list_head elem;
 	u32 gen1;	/* scratch */
 	u32 gen2;	/* scratch */
 	union {
@@ -2164,28 +2189,6 @@ struct imm_ntfy_from_isp {
 #define REQUEST_ENTRY_SIZE	(sizeof(request_t))
 
 
-/*
- * 24 bit port ID type definition.
- */
-typedef union {
-	uint32_t b24 : 24;
-
-	struct {
-#ifdef __BIG_ENDIAN
-		uint8_t domain;
-		uint8_t area;
-		uint8_t al_pa;
-#elif defined(__LITTLE_ENDIAN)
-		uint8_t al_pa;
-		uint8_t area;
-		uint8_t domain;
-#else
-#error "__BIG_ENDIAN or __LITTLE_ENDIAN must be defined!"
-#endif
-		uint8_t rsvd_1;
-	} b;
-} port_id_t;
-#define INVALID_PORT_ID	0xFFFFFF
 
 /*
  * Switch info gathering structure.
@@ -4252,6 +4255,7 @@ typedef struct scsi_qla_host {
 	uint8_t n2n_node_name[WWN_SIZE];
 	uint8_t n2n_port_name[WWN_SIZE];
 	uint16_t	n2n_id;
+	struct list_head gpnid_list;
 } scsi_qla_host_t;
 
 struct qla27xx_image_status {
diff --git a/drivers/scsi/qla2xxx/qla_gs.c b/drivers/scsi/qla2xxx/qla_gs.c
index ea1b562ebc8a..59ecc4eda6cd 100644
--- a/drivers/scsi/qla2xxx/qla_gs.c
+++ b/drivers/scsi/qla2xxx/qla_gs.c
@@ -3221,16 +3221,17 @@ static void qla2x00_async_gpnid_sp_done(void *s, int res)
 	    (struct ct_sns_rsp *)sp->u.iocb_cmd.u.ctarg.rsp;
 	struct event_arg ea;
 	struct qla_work_evt *e;
+	unsigned long flags;
 
 	if (res)
 		ql_dbg(ql_dbg_disc, vha, 0x2066,
-		    "Async done-%s fail res %x ID %3phC. %8phC\n",
-		    sp->name, res, ct_req->req.port_id.port_id,
+		    "Async done-%s fail res %x rscn gen %d ID %3phC. %8phC\n",
+		    sp->name, res, sp->gen1, ct_req->req.port_id.port_id,
 		    ct_rsp->rsp.gpn_id.port_name);
 	else
 		ql_dbg(ql_dbg_disc, vha, 0x2066,
-		    "Async done-%s good ID %3phC. %8phC\n",
-		    sp->name, ct_req->req.port_id.port_id,
+		    "Async done-%s good rscn gen %d ID %3phC. %8phC\n",
+		    sp->name, sp->gen1, ct_req->req.port_id.port_id,
 		    ct_rsp->rsp.gpn_id.port_name);
 
 	memset(&ea, 0, sizeof(ea));
@@ -3242,11 +3243,20 @@ static void qla2x00_async_gpnid_sp_done(void *s, int res)
 	ea.rc = res;
 	ea.event = FCME_GPNID_DONE;
 
+	spin_lock_irqsave(&vha->hw->tgt.sess_lock, flags);
+	list_del(&sp->elem);
+	spin_unlock_irqrestore(&vha->hw->tgt.sess_lock, flags);
+
 	if (res) {
 		if (res == QLA_FUNCTION_TIMEOUT)
 			qla24xx_post_gpnid_work(sp->vha, &ea.id);
 		sp->free(sp);
 		return;
+	} else if (sp->gen1) {
+		/* There was anoter RSNC for this Nport ID */
+		qla24xx_post_gpnid_work(sp->vha, &ea.id);
+		sp->free(sp);
+		return;
 	}
 
 	qla2x00_fcport_event_handler(vha, &ea);
@@ -3282,8 +3292,9 @@ int qla24xx_async_gpnid(scsi_qla_host_t *vha, port_id_t *id)
 {
 	int rval = QLA_FUNCTION_FAILED;
 	struct ct_sns_req       *ct_req;
-	srb_t *sp;
+	srb_t *sp, *tsp;
 	struct ct_sns_pkt *ct_sns;
+	unsigned long flags;
 
 	if (!vha->flags.online)
 		goto done;
@@ -3294,8 +3305,22 @@ int qla24xx_async_gpnid(scsi_qla_host_t *vha, port_id_t *id)
 
 	sp->type = SRB_CT_PTHRU_CMD;
 	sp->name = "gpnid";
+	sp->u.iocb_cmd.u.ctarg.id = *id;
+	sp->gen1 = 0;
 	qla2x00_init_timer(sp, qla2x00_get_async_timeout(vha) + 2);
 
+	spin_lock_irqsave(&vha->hw->tgt.sess_lock, flags);
+	list_for_each_entry(tsp, &vha->gpnid_list, elem) {
+		if (tsp->u.iocb_cmd.u.ctarg.id.b24 == id->b24) {
+			tsp->gen1++;
+			spin_unlock_irqrestore(&vha->hw->tgt.sess_lock, flags);
+			sp->free(sp);
+			goto done;
+		}
+	}
+	list_add_tail(&sp->elem, &vha->gpnid_list);
+	spin_unlock_irqrestore(&vha->hw->tgt.sess_lock, flags);
+
 	sp->u.iocb_cmd.u.ctarg.req = dma_alloc_coherent(&vha->hw->pdev->dev,
 		sizeof(struct ct_sns_pkt), &sp->u.iocb_cmd.u.ctarg.req_dma,
 		GFP_KERNEL);
diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c
index 545c527263d0..85382387a52b 100644
--- a/drivers/scsi/qla2xxx/qla_isr.c
+++ b/drivers/scsi/qla2xxx/qla_isr.c
@@ -1574,7 +1574,7 @@ qla24xx_els_ct_entry(scsi_qla_host_t *vha, struct req_que *req,
 		/* borrowing sts_entry_24xx.comp_status.
 		   same location as ct_entry_24xx.comp_status
 		 */
-		res = qla2x00_chk_ms_status(vha, (ms_iocb_entry_t *)pkt,
+		res = qla2x00_chk_ms_status(sp->vha, (ms_iocb_entry_t *)pkt,
 			(struct ct_sns_rsp *)sp->u.iocb_cmd.u.ctarg.rsp,
 			sp->name);
 		sp->done(sp, res);
diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c
index 428e1bfaa83b..e71d99ba57f9 100644
--- a/drivers/scsi/qla2xxx/qla_os.c
+++ b/drivers/scsi/qla2xxx/qla_os.c
@@ -4515,6 +4515,7 @@ struct scsi_qla_host *qla2x00_create_host(struct scsi_host_template *sht,
 	INIT_LIST_HEAD(&vha->qp_list);
 	INIT_LIST_HEAD(&vha->gnl.fcports);
 	INIT_LIST_HEAD(&vha->nvme_rport_list);
+	INIT_LIST_HEAD(&vha->gpnid_list);
 
 	spin_lock_init(&vha->work_lock);
 	spin_lock_init(&vha->cmd_list_lock);
-- 
2.12.0

^ permalink raw reply related	[flat|nested] 47+ messages in thread

* [PATCH v2 08/22] qla2xxx: Fix login state machine stuck at GPDB
  2017-11-30  3:40 [PATCH v2 00/22] qla2xxx: Bug fixes for 4.15-rc2 Himanshu Madhani
                   ` (6 preceding siblings ...)
  2017-11-30  3:40 ` [PATCH v2 07/22] qla2xxx: Serialize GPNID for multiple RSCN Himanshu Madhani
@ 2017-11-30  3:40 ` Himanshu Madhani
  2017-11-30 15:54   ` Hannes Reinecke
  2017-11-30  3:40 ` [PATCH v2 09/22] qla2xxx: Fix NPIV host cleanup in target mode Himanshu Madhani
                   ` (13 subsequent siblings)
  21 siblings, 1 reply; 47+ messages in thread
From: Himanshu Madhani @ 2017-11-30  3:40 UTC (permalink / raw)
  To: James.Bottomley, martin.petersen; +Cc: himanshu.madhani, linux-scsi

From: Quinn Tran <quinn.tran@cavium.com>

This patch returns discovery state machine back to
Login Complete.

Fixes: 726b85487067d ("qla2xxx: Add framework for async fabric discovery")
Cc: <stable@vger.kernel.org> # 4.10+
Signed-off-by: Quinn Tran <quinn.tran@cavium.com>
Signed-off-by: Himanshu Madhani <himanshu.madhani@cavium.com>
---
 drivers/scsi/qla2xxx/qla_init.c | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c
index be4c67b465b8..2f246996d3e2 100644
--- a/drivers/scsi/qla2xxx/qla_init.c
+++ b/drivers/scsi/qla2xxx/qla_init.c
@@ -863,6 +863,7 @@ void qla24xx_handle_gpdb_event(scsi_qla_host_t *vha, struct event_arg *ea)
 	int rval = ea->rc;
 	fc_port_t *fcport = ea->fcport;
 	unsigned long flags;
+	u16 opt = ea->sp->u.iocb_cmd.u.mbx.out_mb[10];
 
 	fcport->flags &= ~FCF_ASYNC_SENT;
 
@@ -893,7 +894,8 @@ void qla24xx_handle_gpdb_event(scsi_qla_host_t *vha, struct event_arg *ea)
 	}
 
 	spin_lock_irqsave(&vha->hw->tgt.sess_lock, flags);
-	ea->fcport->login_gen++;
+	if (opt != PDO_FORCE_ADISC)
+		ea->fcport->login_gen++;
 	ea->fcport->deleted = 0;
 	ea->fcport->logout_on_delete = 1;
 
@@ -917,6 +919,13 @@ void qla24xx_handle_gpdb_event(scsi_qla_host_t *vha, struct event_arg *ea)
 
 			qla24xx_post_gpsc_work(vha, fcport);
 		}
+	} else if (ea->fcport->login_succ) {
+		/*
+		 * We have an existing session. A late RSCN delivery
+		 * must have triggered the session to be re-validate.
+		 * session is still valid.
+		 */
+		fcport->disc_state = DSC_LOGIN_COMPLETE;
 	}
 	spin_unlock_irqrestore(&vha->hw->tgt.sess_lock, flags);
 } /* gpdb event */
-- 
2.12.0

^ permalink raw reply related	[flat|nested] 47+ messages in thread

* [PATCH v2 09/22] qla2xxx: Fix NPIV host cleanup in target mode
  2017-11-30  3:40 [PATCH v2 00/22] qla2xxx: Bug fixes for 4.15-rc2 Himanshu Madhani
                   ` (7 preceding siblings ...)
  2017-11-30  3:40 ` [PATCH v2 08/22] qla2xxx: Fix login state machine stuck at GPDB Himanshu Madhani
@ 2017-11-30  3:40 ` Himanshu Madhani
  2017-11-30 15:55   ` Hannes Reinecke
  2017-11-30  3:40 ` [PATCH v2 10/22] qla2xxx: Relogin to target port on a cable swap Himanshu Madhani
                   ` (12 subsequent siblings)
  21 siblings, 1 reply; 47+ messages in thread
From: Himanshu Madhani @ 2017-11-30  3:40 UTC (permalink / raw)
  To: James.Bottomley, martin.petersen; +Cc: himanshu.madhani, linux-scsi

From: Sawan Chandak <sawan.chandak@cavium.com>

Add check to make sure we are cleaning up global target host
list only for NPIV hosts

Fixes: bdbe24de281e2 ("scsi: qla2xxx: Cleanup NPIV host in target mode during config teardown")
Cc: <stable@vger.kernel.org> # 4.10+
Signed-off-by: Sawan Chandak <sawan.chandak@cavium.com>
Signed-off-by: Himanshu Madhani <himanshu.madhani@cavium.com>
---
 drivers/scsi/qla2xxx/qla_target.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c
index 924d58f5408f..1bec8aebb7b6 100644
--- a/drivers/scsi/qla2xxx/qla_target.c
+++ b/drivers/scsi/qla2xxx/qla_target.c
@@ -1561,8 +1561,11 @@ static void qlt_release(struct qla_tgt *tgt)
 
 	btree_destroy64(&tgt->lun_qpair_map);
 
-	if (ha->tgt.tgt_ops && ha->tgt.tgt_ops->remove_target)
-		ha->tgt.tgt_ops->remove_target(vha);
+	if (vha->vp_idx)
+		if (ha->tgt.tgt_ops &&
+		    ha->tgt.tgt_ops->remove_target &&
+		    vha->vha_tgt.target_lport_ptr)
+			ha->tgt.tgt_ops->remove_target(vha);
 
 	vha->vha_tgt.qla_tgt = NULL;
 
-- 
2.12.0

^ permalink raw reply related	[flat|nested] 47+ messages in thread

* [PATCH v2 10/22] qla2xxx: Relogin to target port on a cable swap
  2017-11-30  3:40 [PATCH v2 00/22] qla2xxx: Bug fixes for 4.15-rc2 Himanshu Madhani
                   ` (8 preceding siblings ...)
  2017-11-30  3:40 ` [PATCH v2 09/22] qla2xxx: Fix NPIV host cleanup in target mode Himanshu Madhani
@ 2017-11-30  3:40 ` Himanshu Madhani
  2017-11-30 15:58   ` Hannes Reinecke
  2017-11-30  3:40 ` [PATCH v2 11/22] qla2xxx: Fix Relogin being triggered too fast Himanshu Madhani
                   ` (11 subsequent siblings)
  21 siblings, 1 reply; 47+ messages in thread
From: Himanshu Madhani @ 2017-11-30  3:40 UTC (permalink / raw)
  To: James.Bottomley, martin.petersen; +Cc: himanshu.madhani, linux-scsi

From: Quinn Tran <quinn.tran@cavium.com>

If user swaps one target port for another target port for same
switch port, the new target port is not being recognized by the
driver. Current code assumes that old Target port has recovered
from link down. The fix will ask switch what is the WWPN of a
specific NportID (GPNID) rather than assuming it's the same Target
port which has came back.

Fixes: 726b85487067d ("qla2xxx: Add framework for async fabric discovery")
Cc: <stable@vger.kernel.org> # 4.10+
Signed-off-by: Quinn Tran <quinn.tran@cavium.com>
Signed-off-by: Himanshu Madhani <himanshu.madhani@cavium.com>
---
 drivers/scsi/qla2xxx/qla_gs.c     | 164 ++++++++++++++++++++++++++++++--------
 drivers/scsi/qla2xxx/qla_init.c   |   6 +-
 drivers/scsi/qla2xxx/qla_os.c     |  35 +++++++-
 drivers/scsi/qla2xxx/qla_target.c |  35 ++++++--
 4 files changed, 194 insertions(+), 46 deletions(-)

diff --git a/drivers/scsi/qla2xxx/qla_gs.c b/drivers/scsi/qla2xxx/qla_gs.c
index 59ecc4eda6cd..4486c9cc72e6 100644
--- a/drivers/scsi/qla2xxx/qla_gs.c
+++ b/drivers/scsi/qla2xxx/qla_gs.c
@@ -3171,43 +3171,136 @@ void qla24xx_async_gpnid_done(scsi_qla_host_t *vha, srb_t *sp)
 
 void qla24xx_handle_gpnid_event(scsi_qla_host_t *vha, struct event_arg *ea)
 {
-	fc_port_t *fcport;
-	unsigned long flags;
+	fc_port_t *fcport, *conflict, *t;
 
-	spin_lock_irqsave(&vha->hw->tgt.sess_lock, flags);
-	fcport = qla2x00_find_fcport_by_wwpn(vha, ea->port_name, 1);
-	spin_unlock_irqrestore(&vha->hw->tgt.sess_lock, flags);
+	ql_dbg(ql_dbg_disc, vha, 0xffff,
+	    "%s %d port_id: %06x\n",
+	    __func__, __LINE__, ea->id.b24);
 
-	if (fcport) {
-		/* cable moved. just plugged in */
-		fcport->rscn_gen++;
-		fcport->d_id = ea->id;
-		fcport->scan_state = QLA_FCPORT_FOUND;
-		fcport->flags |= FCF_FABRIC_DEVICE;
-
-		switch (fcport->disc_state) {
-		case DSC_DELETED:
-			ql_dbg(ql_dbg_disc, vha, 0x210d,
-			    "%s %d %8phC login\n", __func__, __LINE__,
-			    fcport->port_name);
-			qla24xx_fcport_handle_login(vha, fcport);
-			break;
-		case DSC_DELETE_PEND:
-			break;
-		default:
-			ql_dbg(ql_dbg_disc, vha, 0x2064,
-			    "%s %d %8phC post del sess\n",
-			    __func__, __LINE__, fcport->port_name);
-			qlt_schedule_sess_for_deletion_lock(fcport);
-			break;
+	if (ea->rc) {
+		/* cable is disconnected */
+		list_for_each_entry_safe(fcport, t, &vha->vp_fcports, list) {
+			if (fcport->d_id.b24 == ea->id.b24) {
+				ql_dbg(ql_dbg_disc, vha, 0xffff,
+				    "%s %d %8phC DS %d\n",
+				    __func__, __LINE__,
+				    fcport->port_name,
+				    fcport->disc_state);
+				fcport->scan_state = QLA_FCPORT_SCAN;
+				switch (fcport->disc_state) {
+				case DSC_DELETED:
+				case DSC_DELETE_PEND:
+					break;
+				default:
+					ql_dbg(ql_dbg_disc, vha, 0xffff,
+					    "%s %d %8phC post del sess\n",
+					    __func__, __LINE__,
+					    fcport->port_name);
+					qlt_schedule_sess_for_deletion_lock
+						(fcport);
+					break;
+				}
+			}
 		}
 	} else {
-		/* create new fcport */
-		ql_dbg(ql_dbg_disc, vha, 0x2065,
-		    "%s %d %8phC post new sess\n",
-		    __func__, __LINE__, ea->port_name);
+		/* cable is connected */
+		fcport = qla2x00_find_fcport_by_wwpn(vha, ea->port_name, 1);
+		if (fcport) {
+			list_for_each_entry_safe(conflict, t, &vha->vp_fcports,
+			    list) {
+				if ((conflict->d_id.b24 == ea->id.b24) &&
+				    (fcport != conflict)) {
+					/* 2 fcports with conflict Nport ID or
+					 * an existing fcport is having nport ID
+					 * conflict with new fcport.
+					 */
+
+					ql_dbg(ql_dbg_disc, vha, 0xffff,
+					    "%s %d %8phC DS %d\n",
+					    __func__, __LINE__,
+					    conflict->port_name,
+					    conflict->disc_state);
+					conflict->scan_state = QLA_FCPORT_SCAN;
+					switch (conflict->disc_state) {
+					case DSC_DELETED:
+					case DSC_DELETE_PEND:
+						break;
+					default:
+						ql_dbg(ql_dbg_disc, vha, 0xffff,
+						    "%s %d %8phC post del sess\n",
+						    __func__, __LINE__,
+						    conflict->port_name);
+						qlt_schedule_sess_for_deletion_lock
+							(conflict);
+						break;
+					}
+				}
+			}
 
-		qla24xx_post_newsess_work(vha, &ea->id, ea->port_name, NULL);
+			fcport->rscn_gen++;
+			fcport->scan_state = QLA_FCPORT_FOUND;
+			fcport->flags |= FCF_FABRIC_DEVICE;
+			switch (fcport->disc_state) {
+			case DSC_LOGIN_COMPLETE:
+				/* recheck session is still intact. */
+				ql_dbg(ql_dbg_disc, vha, 0x210d,
+				    "%s %d %8phC revalidate session with ADISC\n",
+				    __func__, __LINE__, fcport->port_name);
+				qla24xx_post_gpdb_work(vha, fcport,
+				    PDO_FORCE_ADISC);
+				break;
+			case DSC_DELETED:
+				ql_dbg(ql_dbg_disc, vha, 0x210d,
+				    "%s %d %8phC login\n", __func__, __LINE__,
+				    fcport->port_name);
+				fcport->d_id = ea->id;
+				qla24xx_fcport_handle_login(vha, fcport);
+				break;
+			case DSC_DELETE_PEND:
+				fcport->d_id = ea->id;
+				break;
+			default:
+				fcport->d_id = ea->id;
+				break;
+			}
+		} else {
+			list_for_each_entry_safe(conflict, t, &vha->vp_fcports,
+			    list) {
+				if (conflict->d_id.b24 == ea->id.b24) {
+					/* 2 fcports with conflict Nport ID or
+					 * an existing fcport is having nport ID
+					 * conflict with new fcport.
+					 */
+					ql_dbg(ql_dbg_disc, vha, 0xffff,
+					    "%s %d %8phC DS %d\n",
+					    __func__, __LINE__,
+					    conflict->port_name,
+					    conflict->disc_state);
+
+					conflict->scan_state = QLA_FCPORT_SCAN;
+					switch (conflict->disc_state) {
+					case DSC_DELETED:
+					case DSC_DELETE_PEND:
+						break;
+					default:
+						ql_dbg(ql_dbg_disc, vha, 0xffff,
+						    "%s %d %8phC post del sess\n",
+						    __func__, __LINE__,
+						    conflict->port_name);
+						qlt_schedule_sess_for_deletion_lock
+							(conflict);
+						break;
+					}
+				}
+			}
+
+			/* create new fcport */
+			ql_dbg(ql_dbg_disc, vha, 0x2065,
+			    "%s %d %8phC post new sess\n",
+			    __func__, __LINE__, ea->port_name);
+			qla24xx_post_newsess_work(vha, &ea->id,
+			    ea->port_name, NULL);
+		}
 	}
 }
 
@@ -3248,10 +3341,11 @@ static void qla2x00_async_gpnid_sp_done(void *s, int res)
 	spin_unlock_irqrestore(&vha->hw->tgt.sess_lock, flags);
 
 	if (res) {
-		if (res == QLA_FUNCTION_TIMEOUT)
+		if (res == QLA_FUNCTION_TIMEOUT) {
 			qla24xx_post_gpnid_work(sp->vha, &ea.id);
-		sp->free(sp);
-		return;
+			sp->free(sp);
+			return;
+		}
 	} else if (sp->gen1) {
 		/* There was anoter RSNC for this Nport ID */
 		qla24xx_post_gpnid_work(sp->vha, &ea.id);
diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c
index 2f246996d3e2..7dd19785f820 100644
--- a/drivers/scsi/qla2xxx/qla_init.c
+++ b/drivers/scsi/qla2xxx/qla_init.c
@@ -925,6 +925,9 @@ void qla24xx_handle_gpdb_event(scsi_qla_host_t *vha, struct event_arg *ea)
 		 * must have triggered the session to be re-validate.
 		 * session is still valid.
 		 */
+		ql_dbg(ql_dbg_disc, vha, 0x20d6,
+		    "%s %d %8phC session revalidate success\n",
+		    __func__, __LINE__, fcport->port_name);
 		fcport->disc_state = DSC_LOGIN_COMPLETE;
 	}
 	spin_unlock_irqrestore(&vha->hw->tgt.sess_lock, flags);
@@ -1049,9 +1052,8 @@ void qla24xx_handle_rscn_event(fc_port_t *fcport, struct event_arg *ea)
 	switch (fcport->disc_state) {
 	case DSC_DELETED:
 	case DSC_LOGIN_COMPLETE:
-		qla24xx_post_gidpn_work(fcport->vha, fcport);
+		qla24xx_post_gpnid_work(fcport->vha, &ea->id);
 		break;
-
 	default:
 		break;
 	}
diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c
index e71d99ba57f9..820d1c185beb 100644
--- a/drivers/scsi/qla2xxx/qla_os.c
+++ b/drivers/scsi/qla2xxx/qla_os.c
@@ -4760,10 +4760,39 @@ void qla24xx_create_new_sess(struct scsi_qla_host *vha, struct qla_work_evt *e)
 	spin_unlock_irqrestore(&vha->hw->tgt.sess_lock, flags);
 
 	if (fcport) {
-		if (pla)
+		if (pla) {
 			qlt_plogi_ack_unref(vha, pla);
-		else
-			qla24xx_async_gffid(vha, fcport);
+		} else {
+			spin_lock_irqsave(&vha->hw->tgt.sess_lock, flags);
+			tfcp = qla2x00_find_fcport_by_nportid(vha,
+			    &e->u.new_sess.id, 1);
+			if (tfcp && (tfcp != fcport)) {
+				/*
+				 * We have a conflict fcport with same NportID.
+				 */
+				ql_dbg(ql_dbg_disc, vha, 0xffff,
+				    "%s %8phC found conflict b4 add. DS %d LS %d\n",
+				    __func__, tfcp->port_name, tfcp->disc_state,
+				    tfcp->fw_login_state);
+
+				switch (tfcp->disc_state) {
+				case DSC_DELETED:
+					break;
+				case DSC_DELETE_PEND:
+					fcport->login_pause = 1;
+					tfcp->conflict = fcport;
+					break;
+				default:
+					fcport->login_pause = 1;
+					tfcp->conflict = fcport;
+					qlt_schedule_sess_for_deletion_lock
+						(tfcp);
+					break;
+				}
+			}
+			spin_unlock_irqrestore(&vha->hw->tgt.sess_lock, flags);
+			qla24xx_async_gnl(vha, fcport);
+		}
 	}
 
 	if (free_fcport) {
diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c
index 1bec8aebb7b6..283ff316e4b2 100644
--- a/drivers/scsi/qla2xxx/qla_target.c
+++ b/drivers/scsi/qla2xxx/qla_target.c
@@ -890,6 +890,17 @@ qlt_plogi_ack_link(struct scsi_qla_host *vha, struct qlt_plogi_ack_t *pla,
 		iocb->u.isp24.port_id[1], iocb->u.isp24.port_id[0],
 		pla->ref_count, pla, link);
 
+	if (link == QLT_PLOGI_LINK_CONFLICT) {
+		switch (sess->disc_state) {
+		case DSC_DELETED:
+		case DSC_DELETE_PEND:
+			pla->ref_count--;
+			return;
+		default:
+			break;
+		}
+	}
+
 	if (sess->plogi_link[link])
 		qlt_plogi_ack_unref(vha, sess->plogi_link[link]);
 
@@ -4737,6 +4748,10 @@ static int qlt_24xx_handle_els(struct scsi_qla_host *vha,
 		sess->d_id = port_id;
 		sess->login_gen++;
 
+		ql_dbg(ql_dbg_disc, vha, 0x20f9,
+		    "%s %d %8phC  DS %d\n",
+		    __func__, __LINE__, sess->port_name, sess->disc_state);
+
 		switch (sess->disc_state) {
 		case DSC_DELETED:
 			qlt_plogi_ack_unref(vha, pla);
@@ -4786,12 +4801,20 @@ static int qlt_24xx_handle_els(struct scsi_qla_host *vha,
 		}
 
 		if (conflict_sess) {
-			ql_dbg(ql_dbg_tgt_mgt, vha, 0xf09b,
-			    "PRLI with conflicting sess %p port %8phC\n",
-			    conflict_sess, conflict_sess->port_name);
-			qlt_send_term_imm_notif(vha, iocb, 1);
-			res = 0;
-			break;
+			switch (conflict_sess->disc_state) {
+			case DSC_DELETED:
+			case DSC_DELETE_PEND:
+				break;
+			default:
+				ql_dbg(ql_dbg_tgt_mgt, vha, 0xf09b,
+				    "PRLI with conflicting sess %p port %8phC\n",
+				    conflict_sess, conflict_sess->port_name);
+				conflict_sess->fw_login_state =
+				    DSC_LS_PORT_UNAVAIL;
+				qlt_send_term_imm_notif(vha, iocb, 1);
+				res = 0;
+				break;
+			}
 		}
 
 		if (sess != NULL) {
-- 
2.12.0

^ permalink raw reply related	[flat|nested] 47+ messages in thread

* [PATCH v2 11/22] qla2xxx: Fix Relogin being triggered too fast
  2017-11-30  3:40 [PATCH v2 00/22] qla2xxx: Bug fixes for 4.15-rc2 Himanshu Madhani
                   ` (9 preceding siblings ...)
  2017-11-30  3:40 ` [PATCH v2 10/22] qla2xxx: Relogin to target port on a cable swap Himanshu Madhani
@ 2017-11-30  3:40 ` Himanshu Madhani
  2017-11-30 16:00   ` Hannes Reinecke
  2017-11-30  3:40 ` [PATCH v2 12/22] qla2xxx: Clear send ELS LOGO flag after target re-login Himanshu Madhani
                   ` (10 subsequent siblings)
  21 siblings, 1 reply; 47+ messages in thread
From: Himanshu Madhani @ 2017-11-30  3:40 UTC (permalink / raw)
  To: James.Bottomley, martin.petersen; +Cc: himanshu.madhani, linux-scsi

From: Quinn Tran <quinn.tran@cavium.com>

Current driver design schedules relogin process via DPC thread
every 1 second. In a large fabric, this DPC thread tries to
schedule too many jobs and might get overloaded. As a result of
this processing of DPC thread, it can schedule relogin earlier
than 1 second.

Fixes: 726b85487067d ("qla2xxx: Add framework for async fabric discovery")
Cc: <stable@vger.kernel.org> # 4.10+
Signed-off-by: Quinn Tran <quinn.tran@cavium.com>
Signed-off-by: Himanshu Madhani <himanshu.madhani@cavium.com>
---
 drivers/scsi/qla2xxx/qla_def.h |  1 +
 drivers/scsi/qla2xxx/qla_mid.c | 24 +++++++++++++++---------
 drivers/scsi/qla2xxx/qla_os.c  | 22 ++++++++++++++--------
 3 files changed, 30 insertions(+), 17 deletions(-)

diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h
index d9b4a0651a0f..93ff92e2363f 100644
--- a/drivers/scsi/qla2xxx/qla_def.h
+++ b/drivers/scsi/qla2xxx/qla_def.h
@@ -4110,6 +4110,7 @@ typedef struct scsi_qla_host {
 #define LOOP_READY	5
 #define LOOP_DEAD	6
 
+	unsigned long   relogin_jif;
 	unsigned long   dpc_flags;
 #define RESET_MARKER_NEEDED	0	/* Send marker to ISP. */
 #define RESET_ACTIVE		1
diff --git a/drivers/scsi/qla2xxx/qla_mid.c b/drivers/scsi/qla2xxx/qla_mid.c
index bd9f14bf7ac2..618ca272d01a 100644
--- a/drivers/scsi/qla2xxx/qla_mid.c
+++ b/drivers/scsi/qla2xxx/qla_mid.c
@@ -343,15 +343,21 @@ qla2x00_do_dpc_vp(scsi_qla_host_t *vha)
 		    "FCPort update end.\n");
 	}
 
-	if ((test_and_clear_bit(RELOGIN_NEEDED, &vha->dpc_flags)) &&
-		!test_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags) &&
-		atomic_read(&vha->loop_state) != LOOP_DOWN) {
-
-		ql_dbg(ql_dbg_dpc, vha, 0x4018,
-		    "Relogin needed scheduled.\n");
-		qla2x00_relogin(vha);
-		ql_dbg(ql_dbg_dpc, vha, 0x4019,
-		    "Relogin needed end.\n");
+	if (test_bit(RELOGIN_NEEDED, &vha->dpc_flags) &&
+	    !test_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags) &&
+	    atomic_read(&vha->loop_state) != LOOP_DOWN) {
+
+		if (!vha->relogin_jif ||
+		    time_after_eq(jiffies, vha->relogin_jif)) {
+			vha->relogin_jif = jiffies + HZ;
+			clear_bit(RELOGIN_NEEDED, &vha->dpc_flags);
+
+			ql_dbg(ql_dbg_dpc, vha, 0x4018,
+			    "Relogin needed scheduled.\n");
+			qla2x00_relogin(vha);
+			ql_dbg(ql_dbg_dpc, vha, 0x4019,
+			    "Relogin needed end.\n");
+		}
 	}
 
 	if (test_and_clear_bit(RESET_MARKER_NEEDED, &vha->dpc_flags) &&
diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c
index 820d1c185beb..2ec77b9f78b8 100644
--- a/drivers/scsi/qla2xxx/qla_os.c
+++ b/drivers/scsi/qla2xxx/qla_os.c
@@ -4905,7 +4905,7 @@ void qla2x00_relogin(struct scsi_qla_host *vha)
 	 */
 		if (atomic_read(&fcport->state) != FCS_ONLINE &&
 		    fcport->login_retry && !(fcport->flags & FCF_ASYNC_SENT)) {
-			fcport->login_retry--;
+
 			if (fcport->flags & FCF_FABRIC_DEVICE) {
 				ql_dbg(ql_dbg_disc, fcport->vha, 0x2108,
 				    "%s %8phC DS %d LS %d\n", __func__,
@@ -4916,6 +4916,7 @@ void qla2x00_relogin(struct scsi_qla_host *vha)
 				ea.fcport = fcport;
 				qla2x00_fcport_event_handler(vha, &ea);
 			} else {
+				fcport->login_retry--;
 				status = qla2x00_local_device_login(vha,
 								fcport);
 				if (status == QLA_SUCCESS) {
@@ -5898,16 +5899,21 @@ qla2x00_do_dpc(void *data)
 		}
 
 		/* Retry each device up to login retry count */
-		if ((test_and_clear_bit(RELOGIN_NEEDED,
-						&base_vha->dpc_flags)) &&
+		if (test_bit(RELOGIN_NEEDED, &base_vha->dpc_flags) &&
 		    !test_bit(LOOP_RESYNC_NEEDED, &base_vha->dpc_flags) &&
 		    atomic_read(&base_vha->loop_state) != LOOP_DOWN) {
 
-			ql_dbg(ql_dbg_dpc, base_vha, 0x400d,
-			    "Relogin scheduled.\n");
-			qla2x00_relogin(base_vha);
-			ql_dbg(ql_dbg_dpc, base_vha, 0x400e,
-			    "Relogin end.\n");
+			if (!base_vha->relogin_jif ||
+			    time_after_eq(jiffies, base_vha->relogin_jif)) {
+				base_vha->relogin_jif = jiffies + HZ;
+				clear_bit(RELOGIN_NEEDED, &base_vha->dpc_flags);
+
+				ql_dbg(ql_dbg_dpc, base_vha, 0x400d,
+				    "Relogin scheduled.\n");
+				qla2x00_relogin(base_vha);
+				ql_dbg(ql_dbg_dpc, base_vha, 0x400e,
+				    "Relogin end.\n");
+			}
 		}
 loop_resync_check:
 		if (test_and_clear_bit(LOOP_RESYNC_NEEDED,
-- 
2.12.0

^ permalink raw reply related	[flat|nested] 47+ messages in thread

* [PATCH v2 12/22] qla2xxx: Clear send ELS LOGO flag after target re-login
  2017-11-30  3:40 [PATCH v2 00/22] qla2xxx: Bug fixes for 4.15-rc2 Himanshu Madhani
                   ` (10 preceding siblings ...)
  2017-11-30  3:40 ` [PATCH v2 11/22] qla2xxx: Fix Relogin being triggered too fast Himanshu Madhani
@ 2017-11-30  3:40 ` Himanshu Madhani
  2017-11-30 16:00   ` Hannes Reinecke
  2017-11-30  3:40 ` [PATCH v2 13/22] qla2xxx: Fix PRLI state check Himanshu Madhani
                   ` (9 subsequent siblings)
  21 siblings, 1 reply; 47+ messages in thread
From: Himanshu Madhani @ 2017-11-30  3:40 UTC (permalink / raw)
  To: James.Bottomley, martin.petersen; +Cc: himanshu.madhani, linux-scsi

From: Quinn Tran <quinn.tran@cavium.com>

This patch fixes clearing out els_send_logo flag at the
time of session deletion.

Fixes: 3515832cc614 ("scsi: qla2xxx: Reset the logo flag, after target re-login.")
Cc: <stable@vger.kernel.org> # 4.10+
Signed-off-by: Quinn Tran <quinn.tran@cavium.com>
Signed-off-by: Himanshu Madhani <himanshu.madhani@cavium.com>
---
 drivers/scsi/qla2xxx/qla_target.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c
index 283ff316e4b2..e824cdc77139 100644
--- a/drivers/scsi/qla2xxx/qla_target.c
+++ b/drivers/scsi/qla2xxx/qla_target.c
@@ -983,6 +983,7 @@ static void qlt_free_session_done(struct work_struct *work)
 			logo.id = sess->d_id;
 			logo.cmd_count = 0;
 			qlt_send_first_logo(vha, &logo);
+			sess->send_els_logo = 0;
 		}
 
 		if (sess->logout_on_delete) {
-- 
2.12.0

^ permalink raw reply related	[flat|nested] 47+ messages in thread

* [PATCH v2 13/22] qla2xxx: Fix PRLI state check
  2017-11-30  3:40 [PATCH v2 00/22] qla2xxx: Bug fixes for 4.15-rc2 Himanshu Madhani
                   ` (11 preceding siblings ...)
  2017-11-30  3:40 ` [PATCH v2 12/22] qla2xxx: Clear send ELS LOGO flag after target re-login Himanshu Madhani
@ 2017-11-30  3:40 ` Himanshu Madhani
  2017-11-30 16:02   ` Hannes Reinecke
  2017-11-30  3:40 ` [PATCH v2 14/22] qla2xxx: Fix abort command deadlock due to spinlock Himanshu Madhani
                   ` (8 subsequent siblings)
  21 siblings, 1 reply; 47+ messages in thread
From: Himanshu Madhani @ 2017-11-30  3:40 UTC (permalink / raw)
  To: James.Bottomley, martin.petersen; +Cc: himanshu.madhani, linux-scsi

From: Quinn Tran <quinn.tran@cavium.com>

Get Port Database MBX cmd is to validate current Login state upon
PRLI completion. Current code looks at the last login state for
re-validation which was incorrect. This patch removed incorrect
state check.

Fixes: 15f30a5752287 ("qla2xxx: Use IOCB interface to submit non-critical MBX.")
Cc: <stable@vger.kernel.org> # 4.10+
Signed-off-by: Quinn Tran <quinn.tran@cavium.com>
Signed-off-by: Himanshu Madhani <himanshu.madhani@cavium.com>
---
 drivers/scsi/qla2xxx/qla_mbx.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/drivers/scsi/qla2xxx/qla_mbx.c b/drivers/scsi/qla2xxx/qla_mbx.c
index cb717d47339f..e2b5fa47bb57 100644
--- a/drivers/scsi/qla2xxx/qla_mbx.c
+++ b/drivers/scsi/qla2xxx/qla_mbx.c
@@ -6160,8 +6160,7 @@ int __qla24xx_parse_gpdb(struct scsi_qla_host *vha, fc_port_t *fcport,
 	}
 
 	/* Check for logged in state. */
-	if (current_login_state != PDS_PRLI_COMPLETE &&
-	    last_login_state != PDS_PRLI_COMPLETE) {
+	if (current_login_state != PDS_PRLI_COMPLETE) {
 		ql_dbg(ql_dbg_mbx, vha, 0x119a,
 		    "Unable to verify login-state (%x/%x) for loop_id %x.\n",
 		    current_login_state, last_login_state, fcport->loop_id);
-- 
2.12.0

^ permalink raw reply related	[flat|nested] 47+ messages in thread

* [PATCH v2 14/22] qla2xxx: Fix abort command deadlock due to spinlock
  2017-11-30  3:40 [PATCH v2 00/22] qla2xxx: Bug fixes for 4.15-rc2 Himanshu Madhani
                   ` (12 preceding siblings ...)
  2017-11-30  3:40 ` [PATCH v2 13/22] qla2xxx: Fix PRLI state check Himanshu Madhani
@ 2017-11-30  3:40 ` Himanshu Madhani
  2017-11-30 16:19   ` Hannes Reinecke
  2017-11-30  3:40 ` [PATCH v2 15/22] qla2xxx: Replace fcport alloc with qla2x00_alloc_fcport Himanshu Madhani
                   ` (7 subsequent siblings)
  21 siblings, 1 reply; 47+ messages in thread
From: Himanshu Madhani @ 2017-11-30  3:40 UTC (permalink / raw)
  To: James.Bottomley, martin.petersen; +Cc: himanshu.madhani, linux-scsi

From: Quinn Tran <quinn.tran@cavium.com>

Original code acquires hardware_lock to add Abort IOCB
onto driver's request queue for processing. However,
abort_command() will also acquire hardware lock to look up
sp pointer before issuing abort IOCB command resulting
into a deadlock. This patch safely removes the possible
deadlock scenario by removing extra spinlock.

Fixes: 6eb54715b54bb ("qla2xxx: Added interface to send explicit LOGO.")
Cc: <stable@vger.kernel.org> # 4.10+
Signed-off-by: Quinn Tran <quinn.tran@cavium.com>
Signed-off-by: Himanshu Madhani <himanshu.madhani@cavium.com>
---
 drivers/scsi/qla2xxx/qla_iocb.c | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/drivers/scsi/qla2xxx/qla_iocb.c b/drivers/scsi/qla2xxx/qla_iocb.c
index d810a447cb4a..106f4ac4f733 100644
--- a/drivers/scsi/qla2xxx/qla_iocb.c
+++ b/drivers/scsi/qla2xxx/qla_iocb.c
@@ -2394,7 +2394,6 @@ qla2x00_els_dcmd_iocb_timeout(void *data)
 	struct scsi_qla_host *vha = sp->vha;
 	struct qla_hw_data *ha = vha->hw;
 	struct srb_iocb *lio = &sp->u.iocb_cmd;
-	unsigned long flags = 0;
 
 	ql_dbg(ql_dbg_io, vha, 0x3069,
 	    "%s Timeout, hdl=%x, portid=%02x%02x%02x\n",
@@ -2402,7 +2401,6 @@ qla2x00_els_dcmd_iocb_timeout(void *data)
 	    fcport->d_id.b.al_pa);
 
 	/* Abort the exchange */
-	spin_lock_irqsave(&ha->hardware_lock, flags);
 	if (ha->isp_ops->abort_command(sp)) {
 		ql_dbg(ql_dbg_io, vha, 0x3070,
 		    "mbx abort_command failed.\n");
@@ -2410,7 +2408,6 @@ qla2x00_els_dcmd_iocb_timeout(void *data)
 		ql_dbg(ql_dbg_io, vha, 0x3071,
 		    "mbx abort_command success.\n");
 	}
-	spin_unlock_irqrestore(&ha->hardware_lock, flags);
 
 	complete(&lio->u.els_logo.comp);
 }
-- 
2.12.0

^ permalink raw reply related	[flat|nested] 47+ messages in thread

* [PATCH v2 15/22] qla2xxx: Replace fcport alloc with qla2x00_alloc_fcport
  2017-11-30  3:40 [PATCH v2 00/22] qla2xxx: Bug fixes for 4.15-rc2 Himanshu Madhani
                   ` (13 preceding siblings ...)
  2017-11-30  3:40 ` [PATCH v2 14/22] qla2xxx: Fix abort command deadlock due to spinlock Himanshu Madhani
@ 2017-11-30  3:40 ` Himanshu Madhani
  2017-11-30 16:19   ` Hannes Reinecke
  2017-11-30  3:40 ` [PATCH v2 16/22] qla2xxx: Fix scan state field for fcport Himanshu Madhani
                   ` (6 subsequent siblings)
  21 siblings, 1 reply; 47+ messages in thread
From: Himanshu Madhani @ 2017-11-30  3:40 UTC (permalink / raw)
  To: James.Bottomley, martin.petersen; +Cc: himanshu.madhani, linux-scsi

From: Quinn Tran <quinn.tran@cavium.com>

Current code manually allocate an fcport structure that
is not properly initialize. Replace kzalloc with
qla2x00_alloc_fcport, so that all fields are initialized.
Also set set scan flag to port found

Cc: <stable@vger.kernel.org>
Signed-off-by: Quinn Tran <quinn.tran@cavium.com>
Signed-off-by: Himanshu Madhani <himanshu.madhani@cavium.com>
---
 drivers/scsi/qla2xxx/qla_target.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c
index e824cdc77139..2a6242d97a7e 100644
--- a/drivers/scsi/qla2xxx/qla_target.c
+++ b/drivers/scsi/qla2xxx/qla_target.c
@@ -5783,7 +5783,7 @@ static fc_port_t *qlt_get_port_database(struct scsi_qla_host *vha,
 	unsigned long flags;
 	u8 newfcport = 0;
 
-	fcport = kzalloc(sizeof(*fcport), GFP_KERNEL);
+	fcport = qla2x00_alloc_fcport(vha, GFP_KERNEL);
 	if (!fcport) {
 		ql_dbg(ql_dbg_tgt_mgt, vha, 0xf06f,
 		    "qla_target(%d): Allocation of tmp FC port failed",
-- 
2.12.0

^ permalink raw reply related	[flat|nested] 47+ messages in thread

* [PATCH v2 16/22] qla2xxx: Fix scan state field for fcport
  2017-11-30  3:40 [PATCH v2 00/22] qla2xxx: Bug fixes for 4.15-rc2 Himanshu Madhani
                   ` (14 preceding siblings ...)
  2017-11-30  3:40 ` [PATCH v2 15/22] qla2xxx: Replace fcport alloc with qla2x00_alloc_fcport Himanshu Madhani
@ 2017-11-30  3:40 ` Himanshu Madhani
  2017-11-30 16:20   ` Hannes Reinecke
  2017-11-30  3:40 ` [PATCH v2 17/22] qla2xxx: Clear loop id after delete Himanshu Madhani
                   ` (5 subsequent siblings)
  21 siblings, 1 reply; 47+ messages in thread
From: Himanshu Madhani @ 2017-11-30  3:40 UTC (permalink / raw)
  To: James.Bottomley, martin.petersen; +Cc: himanshu.madhani, linux-scsi

From: Quinn Tran <quinn.tran@cavium.com>

Add correct value of scan_state field indicating state
of the FC port

Fixes: 726b85487067d ("qla2xxx: Add framework for async fabric discovery")
Cc: <stable@vger.kernel.org> # 4.10+
Signed-off-by: Quinn Tran <quinn.tran@cavium.com>
Signed-off-by: Himanshu Madhani <himanshu.madhani@cavium.com>
---
 drivers/scsi/qla2xxx/qla_target.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c
index 2a6242d97a7e..1c219998ab60 100644
--- a/drivers/scsi/qla2xxx/qla_target.c
+++ b/drivers/scsi/qla2xxx/qla_target.c
@@ -5812,6 +5812,7 @@ static fc_port_t *qlt_get_port_database(struct scsi_qla_host *vha,
 		tfcp->port_type = fcport->port_type;
 		tfcp->supported_classes = fcport->supported_classes;
 		tfcp->flags |= fcport->flags;
+		tfcp->scan_state = QLA_FCPORT_FOUND;
 
 		del = fcport;
 		fcport = tfcp;
-- 
2.12.0

^ permalink raw reply related	[flat|nested] 47+ messages in thread

* [PATCH v2 17/22] qla2xxx: Clear loop id after delete
  2017-11-30  3:40 [PATCH v2 00/22] qla2xxx: Bug fixes for 4.15-rc2 Himanshu Madhani
                   ` (15 preceding siblings ...)
  2017-11-30  3:40 ` [PATCH v2 16/22] qla2xxx: Fix scan state field for fcport Himanshu Madhani
@ 2017-11-30  3:40 ` Himanshu Madhani
  2017-11-30 16:20   ` Hannes Reinecke
  2017-11-30  3:40 ` [PATCH v2 18/22] qla2xxx: Defer processing of GS IOCB calls Himanshu Madhani
                   ` (4 subsequent siblings)
  21 siblings, 1 reply; 47+ messages in thread
From: Himanshu Madhani @ 2017-11-30  3:40 UTC (permalink / raw)
  To: James.Bottomley, martin.petersen; +Cc: himanshu.madhani, linux-scsi

From: Quinn Tran <quinn.tran@cavium.com>

clear loop id after delete to prevent session invalidation
of stale session.

Fixes: 726b85487067d ("qla2xxx: Add framework for async fabric discovery")
Cc: <stable@vger.kernel.org> # 4.10+
Signed-off-by: Quinn Tran <quinn.tran@cavium.com>
Signed-off-by: Himanshu Madhani <himanshu.madhani@cavium.com>
---
 drivers/scsi/qla2xxx/qla_target.c | 9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)

diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c
index 1c219998ab60..0c0453f2ca9e 100644
--- a/drivers/scsi/qla2xxx/qla_target.c
+++ b/drivers/scsi/qla2xxx/qla_target.c
@@ -986,7 +986,7 @@ static void qlt_free_session_done(struct work_struct *work)
 			sess->send_els_logo = 0;
 		}
 
-		if (sess->logout_on_delete) {
+		if (sess->logout_on_delete && sess->loop_id != FC_NO_LOOP_ID) {
 			int rc;
 
 			rc = qla2x00_post_async_logout_work(vha, sess, NULL);
@@ -1045,8 +1045,7 @@ static void qlt_free_session_done(struct work_struct *work)
 		sess->login_succ = 0;
 	}
 
-	if (sess->chip_reset != ha->base_qpair->chip_reset)
-		qla2x00_clear_loop_id(sess);
+	qla2x00_clear_loop_id(sess);
 
 	if (sess->conflict) {
 		sess->conflict->login_pause = 0;
@@ -4600,9 +4599,9 @@ qlt_find_sess_invalidate_other(scsi_qla_host_t *vha, uint64_t wwn,
 				    "Invalidating sess %p loop_id %d wwn %llx.\n",
 				    other_sess, other_sess->loop_id, other_wwn);
 
-
 				other_sess->keep_nport_handle = 1;
-				*conflict_sess = other_sess;
+				if (other_sess->disc_state != DSC_DELETED)
+					*conflict_sess = other_sess;
 				qlt_schedule_sess_for_deletion(other_sess,
 				    true);
 			}
-- 
2.12.0

^ permalink raw reply related	[flat|nested] 47+ messages in thread

* [PATCH v2 18/22] qla2xxx: Defer processing of GS IOCB calls
  2017-11-30  3:40 [PATCH v2 00/22] qla2xxx: Bug fixes for 4.15-rc2 Himanshu Madhani
                   ` (16 preceding siblings ...)
  2017-11-30  3:40 ` [PATCH v2 17/22] qla2xxx: Clear loop id after delete Himanshu Madhani
@ 2017-11-30  3:40 ` Himanshu Madhani
  2017-11-30 16:21   ` Hannes Reinecke
  2017-11-30  3:40 ` [PATCH v2 19/22] qla2xxx: Remove aborting ELS IOCB call issued as part of timeout Himanshu Madhani
                   ` (3 subsequent siblings)
  21 siblings, 1 reply; 47+ messages in thread
From: Himanshu Madhani @ 2017-11-30  3:40 UTC (permalink / raw)
  To: James.Bottomley, martin.petersen; +Cc: himanshu.madhani, linux-scsi

From: Giridhar Malavali <giridhar.malavali@cavium.com>

This patch defers processing of GS IOCB calls from interrupt
context to avoid hardware spinlock recursion.

Following stack trace is seen

? mod_timer+0x193/0x330
? ql_dbg+0xa7/0xf0 [qla2xxx]
_raw_spin_lock_irqsave+0x31/0x40
qla2x00_start_sp+0x3b/0x250 [qla2xxx]
qla24xx_async_gnl+0x1d3/0x240 [qla2xxx]
qla24xx_fcport_handle_login+0x285/0x290 [qla2xxx]
? vprintk_func+0x20/0x50

Fixes: 726b85487067d ("qla2xxx: Add framework for async fabric discovery")
Cc: <stable@vger.kernel.org> # 4.10+
Signed-off-by: Giridhar Malavali <giridhar.malavali@cavium.com>
Signed-off-by: Himanshu Madhani <himanshu.madhani@cavium.com>
---
 drivers/scsi/qla2xxx/qla_init.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c
index 7dd19785f820..57b8f43c5980 100644
--- a/drivers/scsi/qla2xxx/qla_init.c
+++ b/drivers/scsi/qla2xxx/qla_init.c
@@ -975,7 +975,7 @@ int qla24xx_fcport_handle_login(struct scsi_qla_host *vha, fc_port_t *fcport)
 			ql_dbg(ql_dbg_disc, vha, 0x20bd,
 			    "%s %d %8phC post gnl\n",
 			    __func__, __LINE__, fcport->port_name);
-			qla24xx_async_gnl(vha, fcport);
+			qla24xx_post_gnl_work(vha, fcport);
 		} else {
 			ql_dbg(ql_dbg_disc, vha, 0x20bf,
 			    "%s %d %8phC post login\n",
@@ -1143,7 +1143,7 @@ void qla24xx_handle_relogin_event(scsi_qla_host_t *vha,
 		ql_dbg(ql_dbg_disc, vha, 0x20e9, "%s %d %8phC post gidpn\n",
 		    __func__, __LINE__, fcport->port_name);
 
-		qla24xx_async_gidpn(vha, fcport);
+		qla24xx_post_gidpn_work(vha, fcport);
 		return;
 	}
 
-- 
2.12.0

^ permalink raw reply related	[flat|nested] 47+ messages in thread

* [PATCH v2 19/22] qla2xxx: Remove aborting ELS IOCB call issued as part of timeout.
  2017-11-30  3:40 [PATCH v2 00/22] qla2xxx: Bug fixes for 4.15-rc2 Himanshu Madhani
                   ` (17 preceding siblings ...)
  2017-11-30  3:40 ` [PATCH v2 18/22] qla2xxx: Defer processing of GS IOCB calls Himanshu Madhani
@ 2017-11-30  3:40 ` Himanshu Madhani
  2017-11-30 16:23   ` Hannes Reinecke
  2017-11-30  3:40 ` [PATCH v2 20/22] qla2xxx: Fix system crash in qlt_plogi_ack_unref Himanshu Madhani
                   ` (2 subsequent siblings)
  21 siblings, 1 reply; 47+ messages in thread
From: Himanshu Madhani @ 2017-11-30  3:40 UTC (permalink / raw)
  To: James.Bottomley, martin.petersen; +Cc: himanshu.madhani, linux-scsi

From: Giridhar Malavali <giridhar.malavali@cavium.com>

This fix the spinlock recursion issue seen while unloading the driver.

14 [ffff9f2e21e03db8] native_queued_spin_lock_slowpath at ffffffffad0d8802
15 [ffff9f2e21e03dc0] do_raw_spin_lock at ffffffffad0d99e4
16 [ffff9f2e21e03dd8] _raw_spin_lock_irqsave at ffffffffad652471
17 [ffff9f2e21e03e00] qla2x00_els_dcmd_iocb_timeout at ffffffffc070cd63
18 [ffff9f2e21e03e40] qla2x00_sp_timeout at ffffffffc06f06d3 [qla2xxx]
19 [ffff9f2e21e03e68] call_timer_fn at ffffffffad0f97d8
20 [ffff9f2e21e03ed8] run_timer_softirq at ffffffffad0faf47
21 [ffff9f2e21e03f68] __softirqentry_text_start at ffffffffad655f32

Fixes: 6eb54715b54bb ("qla2xxx: Added interface to send explicit LOGO.")
Cc: <stable@vger.kernel.org> # 4.10+
Signed-off-by: Giridhar Malavali <giridhar.malavali@cavium.com>
Signed-off-by: Himanshu Madhani <himanshu.madhani@cavium.com>
---
 drivers/scsi/qla2xxx/qla_iocb.c | 10 ----------
 1 file changed, 10 deletions(-)

diff --git a/drivers/scsi/qla2xxx/qla_iocb.c b/drivers/scsi/qla2xxx/qla_iocb.c
index 106f4ac4f733..8ea59586f4f1 100644
--- a/drivers/scsi/qla2xxx/qla_iocb.c
+++ b/drivers/scsi/qla2xxx/qla_iocb.c
@@ -2392,7 +2392,6 @@ qla2x00_els_dcmd_iocb_timeout(void *data)
 	srb_t *sp = data;
 	fc_port_t *fcport = sp->fcport;
 	struct scsi_qla_host *vha = sp->vha;
-	struct qla_hw_data *ha = vha->hw;
 	struct srb_iocb *lio = &sp->u.iocb_cmd;
 
 	ql_dbg(ql_dbg_io, vha, 0x3069,
@@ -2400,15 +2399,6 @@ qla2x00_els_dcmd_iocb_timeout(void *data)
 	    sp->name, sp->handle, fcport->d_id.b.domain, fcport->d_id.b.area,
 	    fcport->d_id.b.al_pa);
 
-	/* Abort the exchange */
-	if (ha->isp_ops->abort_command(sp)) {
-		ql_dbg(ql_dbg_io, vha, 0x3070,
-		    "mbx abort_command failed.\n");
-	} else {
-		ql_dbg(ql_dbg_io, vha, 0x3071,
-		    "mbx abort_command success.\n");
-	}
-
 	complete(&lio->u.els_logo.comp);
 }
 
-- 
2.12.0

^ permalink raw reply related	[flat|nested] 47+ messages in thread

* [PATCH v2 20/22] qla2xxx: Fix system crash in qlt_plogi_ack_unref
  2017-11-30  3:40 [PATCH v2 00/22] qla2xxx: Bug fixes for 4.15-rc2 Himanshu Madhani
                   ` (18 preceding siblings ...)
  2017-11-30  3:40 ` [PATCH v2 19/22] qla2xxx: Remove aborting ELS IOCB call issued as part of timeout Himanshu Madhani
@ 2017-11-30  3:40 ` Himanshu Madhani
  2017-11-30 16:24   ` Hannes Reinecke
  2017-11-30  3:40 ` [PATCH v2 21/22] qla2xxx: Fix memory leak in dual/target mode Himanshu Madhani
  2017-11-30  3:40 ` [PATCH v2 22/22] qla2xxx: Update driver version to 10.00.00.03-k Himanshu Madhani
  21 siblings, 1 reply; 47+ messages in thread
From: Himanshu Madhani @ 2017-11-30  3:40 UTC (permalink / raw)
  To: James.Bottomley, martin.petersen; +Cc: himanshu.madhani, linux-scsi

From: Quinn Tran <quinn.tran@cavium.com>

Fix system crash due to NULL pointer access.

qlt_plogi_ack_t and fc_port structures were not properly
bound before calling qlt_plogi_ack_unref().

RIP: 0010:qlt_plogi_ack_unref+0xa1/0x150 [qla2xxx]
Call Trace:
qla24xx_create_new_sess+0xb1/0x320 [qla2xxx]
qla2x00_do_work+0x123/0x260 [qla2xxx]
qla2x00_iocb_work_fn+0x30/0x40 [qla2xxx]
process_one_work+0x1f3/0x530
worker_thread+0x4e/0x480
kthread+0x10c/0x140

Fixes: 726b85487067d ("qla2xxx: Add framework for async fabric discovery")
Cc: <stable@vger.kernel.org> # 4.10+
Signed-off-by: Quinn Tran <quinn.tran@cavium.com>
Signed-off-by: Giridhar Malavali <giridhar.malavali@cavium.com>
Signed-off-by: Himanshu Madhani <himanshu.madhani@cavium.com>
---
 drivers/scsi/qla2xxx/qla_os.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c
index 2ec77b9f78b8..789030c9dd26 100644
--- a/drivers/scsi/qla2xxx/qla_os.c
+++ b/drivers/scsi/qla2xxx/qla_os.c
@@ -4750,11 +4750,11 @@ void qla24xx_create_new_sess(struct scsi_qla_host *vha, struct qla_work_evt *e)
 		} else {
 			list_add_tail(&fcport->list, &vha->vp_fcports);
 
-			if (pla) {
-				qlt_plogi_ack_link(vha, pla, fcport,
-				    QLT_PLOGI_LINK_SAME_WWN);
-				pla->ref_count--;
-			}
+		}
+		if (pla) {
+			qlt_plogi_ack_link(vha, pla, fcport,
+			    QLT_PLOGI_LINK_SAME_WWN);
+			pla->ref_count--;
 		}
 	}
 	spin_unlock_irqrestore(&vha->hw->tgt.sess_lock, flags);
-- 
2.12.0

^ permalink raw reply related	[flat|nested] 47+ messages in thread

* [PATCH v2 21/22] qla2xxx: Fix memory leak in dual/target mode
  2017-11-30  3:40 [PATCH v2 00/22] qla2xxx: Bug fixes for 4.15-rc2 Himanshu Madhani
                   ` (19 preceding siblings ...)
  2017-11-30  3:40 ` [PATCH v2 20/22] qla2xxx: Fix system crash in qlt_plogi_ack_unref Himanshu Madhani
@ 2017-11-30  3:40 ` Himanshu Madhani
  2017-11-30 16:25   ` Hannes Reinecke
  2017-11-30  3:40 ` [PATCH v2 22/22] qla2xxx: Update driver version to 10.00.00.03-k Himanshu Madhani
  21 siblings, 1 reply; 47+ messages in thread
From: Himanshu Madhani @ 2017-11-30  3:40 UTC (permalink / raw)
  To: James.Bottomley, martin.petersen; +Cc: himanshu.madhani, linux-scsi

When driver is loaded in Target/Dual mode, it creates QPair
to support MQ and allocates resources for each QPair. This Qpair
initialization is delayed until the FW personality is changed to
Dual/Target mode by issuing chip reset. At the time of chip reset
firmware is re-initilized in correct personality all the QPairs
are initialized by sending MBC_INITIALIZE_MULTIQ (001Fh).

This patch fixes memory leak by adding check to issue
MBC_INITIALIZE_MULTIQ command only while deleting rsp/req queue
when the flag is set for initiator mode, and clean up QPair resources
correctly during the driver unload. This MBX does not need to be
issued for Target/Dual mode because chip reset will reset ISP.

Fixes: d65237c7f0860 ("scsi: qla2xxx: Fix mailbox failure while deleting Queue pairs")
Cc: <stable@vger.kernel.org> # 4.10+
Signed-off-by: Himanshu Madhani <himanshu.madhani@cavium.com>
---
 drivers/scsi/qla2xxx/qla_init.c |  4 +---
 drivers/scsi/qla2xxx/qla_mid.c  | 18 ++++++++++--------
 2 files changed, 11 insertions(+), 11 deletions(-)

diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c
index 57b8f43c5980..58663df38627 100644
--- a/drivers/scsi/qla2xxx/qla_init.c
+++ b/drivers/scsi/qla2xxx/qla_init.c
@@ -8220,9 +8220,6 @@ int qla2xxx_delete_qpair(struct scsi_qla_host *vha, struct qla_qpair *qpair)
 	int ret = QLA_FUNCTION_FAILED;
 	struct qla_hw_data *ha = qpair->hw;
 
-	if (!vha->flags.qpairs_req_created && !vha->flags.qpairs_rsp_created)
-		goto fail;
-
 	qpair->delete_in_progress = 1;
 	while (atomic_read(&qpair->ref_count))
 		msleep(500);
@@ -8230,6 +8227,7 @@ int qla2xxx_delete_qpair(struct scsi_qla_host *vha, struct qla_qpair *qpair)
 	ret = qla25xx_delete_req_que(vha, qpair->req);
 	if (ret != QLA_SUCCESS)
 		goto fail;
+
 	ret = qla25xx_delete_rsp_que(vha, qpair->rsp);
 	if (ret != QLA_SUCCESS)
 		goto fail;
diff --git a/drivers/scsi/qla2xxx/qla_mid.c b/drivers/scsi/qla2xxx/qla_mid.c
index 618ca272d01a..e538e6308885 100644
--- a/drivers/scsi/qla2xxx/qla_mid.c
+++ b/drivers/scsi/qla2xxx/qla_mid.c
@@ -575,14 +575,15 @@ qla25xx_free_rsp_que(struct scsi_qla_host *vha, struct rsp_que *rsp)
 int
 qla25xx_delete_req_que(struct scsi_qla_host *vha, struct req_que *req)
 {
-	int ret = -1;
+	int ret = QLA_SUCCESS;
 
-	if (req) {
+	if (req && vha->flags.qpairs_req_created) {
 		req->options |= BIT_0;
 		ret = qla25xx_init_req_que(vha, req);
+		if (ret != QLA_SUCCESS)
+			return QLA_FUNCTION_FAILED;
 	}
-	if (ret == QLA_SUCCESS)
-		qla25xx_free_req_que(vha, req);
+	qla25xx_free_req_que(vha, req);
 
 	return ret;
 }
@@ -590,14 +591,15 @@ qla25xx_delete_req_que(struct scsi_qla_host *vha, struct req_que *req)
 int
 qla25xx_delete_rsp_que(struct scsi_qla_host *vha, struct rsp_que *rsp)
 {
-	int ret = -1;
+	int ret = QLA_SUCCESS;
 
-	if (rsp) {
+	if (rsp && vha->flags.qpairs_rsp_created) {
 		rsp->options |= BIT_0;
 		ret = qla25xx_init_rsp_que(vha, rsp);
+		if (ret != QLA_SUCCESS)
+			return QLA_FUNCTION_FAILED;
 	}
-	if (ret == QLA_SUCCESS)
-		qla25xx_free_rsp_que(vha, rsp);
+	qla25xx_free_rsp_que(vha, rsp);
 
 	return ret;
 }
-- 
2.12.0

^ permalink raw reply related	[flat|nested] 47+ messages in thread

* [PATCH v2 22/22] qla2xxx: Update driver version to 10.00.00.03-k
  2017-11-30  3:40 [PATCH v2 00/22] qla2xxx: Bug fixes for 4.15-rc2 Himanshu Madhani
                   ` (20 preceding siblings ...)
  2017-11-30  3:40 ` [PATCH v2 21/22] qla2xxx: Fix memory leak in dual/target mode Himanshu Madhani
@ 2017-11-30  3:40 ` Himanshu Madhani
  2017-11-30 16:25   ` Hannes Reinecke
  21 siblings, 1 reply; 47+ messages in thread
From: Himanshu Madhani @ 2017-11-30  3:40 UTC (permalink / raw)
  To: James.Bottomley, martin.petersen; +Cc: himanshu.madhani, linux-scsi

Signed-off-by: Himanshu Madhani <himanshu.madhani@cavium.com>
---
 drivers/scsi/qla2xxx/qla_version.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/scsi/qla2xxx/qla_version.h b/drivers/scsi/qla2xxx/qla_version.h
index b6ec02b96d3d..911b82226d13 100644
--- a/drivers/scsi/qla2xxx/qla_version.h
+++ b/drivers/scsi/qla2xxx/qla_version.h
@@ -7,7 +7,7 @@
 /*
  * Driver version
  */
-#define QLA2XXX_VERSION      "10.00.00.02-k"
+#define QLA2XXX_VERSION      "10.00.00.03-k"
 
 #define QLA_DRIVER_MAJOR_VER	10
 #define QLA_DRIVER_MINOR_VER	0
-- 
2.12.0

^ permalink raw reply related	[flat|nested] 47+ messages in thread

* Re: [PATCH v2 01/22] qla2xxx: Fix system crash for Notify ack timeout handling
  2017-11-30  3:40 ` [PATCH v2 01/22] qla2xxx: Fix system crash for Notify ack timeout handling Himanshu Madhani
@ 2017-11-30 15:47   ` Hannes Reinecke
  0 siblings, 0 replies; 47+ messages in thread
From: Hannes Reinecke @ 2017-11-30 15:47 UTC (permalink / raw)
  To: Himanshu Madhani, James.Bottomley, martin.petersen; +Cc: linux-scsi

On 11/30/2017 04:40 AM, Himanshu Madhani wrote:
> From: Quinn Tran <quinn.tran@cavium.com>
> 
> Fix NULL pointer crash due to missing timeout handling callback
> for Notify Ack IOCB.
> 
> Fixes: 726b85487067d ("qla2xxx: Add framework for async fabric discovery")
> Cc: <stable@vger.kernel.org> # 4.10+
> Signed-off-by: Quinn Tran <quinn.tran@cavium.com>
> Signed-off-by: Himanshu Madhani <himanshu.madhani@cavium.com>
> ---
>  drivers/scsi/qla2xxx/qla_target.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c
> index 18069edd4773..1259ec85ec0a 100644
> --- a/drivers/scsi/qla2xxx/qla_target.c
> +++ b/drivers/scsi/qla2xxx/qla_target.c
> @@ -665,7 +665,7 @@ int qla24xx_async_notify_ack(scsi_qla_host_t *vha, fc_port_t *fcport,
>  	qla2x00_init_timer(sp, qla2x00_get_async_timeout(vha)+2);
>  
>  	sp->u.iocb_cmd.u.nack.ntfy = ntfy;
> -
> +	sp->u.iocb_cmd.timeout = qla2x00_async_iocb_timeout;
>  	sp->done = qla2x00_async_nack_sp_done;
>  
>  	rval = qla2x00_start_sp(sp);
> 
Reviewed-by: Hannes Reinecke <hare@suse.com>

Cheers,

Hannes
-- 
Dr. Hannes Reinecke		   Teamlead Storage & Networking
hare@suse.de			               +49 911 74053 688
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: F. Imendörffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
HRB 21284 (AG Nürnberg)

^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: [PATCH v2 02/22] qla2xxx: Fix gpnid error processing
  2017-11-30  3:40 ` [PATCH v2 02/22] qla2xxx: Fix gpnid error processing Himanshu Madhani
@ 2017-11-30 15:48   ` Hannes Reinecke
  0 siblings, 0 replies; 47+ messages in thread
From: Hannes Reinecke @ 2017-11-30 15:48 UTC (permalink / raw)
  To: Himanshu Madhani, James.Bottomley, martin.petersen; +Cc: linux-scsi

On 11/30/2017 04:40 AM, Himanshu Madhani wrote:
> From: Quinn Tran <quinn.tran@cavium.com>
> 
> Stop GPNID command from advancing if command has failed.
> 
> Fixes: 726b85487067d ("qla2xxx: Add framework for async fabric discovery")
> Cc: <stable@vger.kernel.org> # 4.10+
> Signed-off-by: Quinn Tran <quinn.tran@cavium.com>
> Signed-off-by: Himanshu Madhani <himanshu.madhani@cavium.com>
> ---
>  drivers/scsi/qla2xxx/qla_gs.c | 5 +++++
>  1 file changed, 5 insertions(+)
> 
> diff --git a/drivers/scsi/qla2xxx/qla_gs.c b/drivers/scsi/qla2xxx/qla_gs.c
> index bc3db6abc9a0..ddc69d36877e 100644
> --- a/drivers/scsi/qla2xxx/qla_gs.c
> +++ b/drivers/scsi/qla2xxx/qla_gs.c
> @@ -3211,6 +3211,11 @@ static void qla2x00_async_gpnid_sp_done(void *s, int res)
>  	    sp->name, res, ct_req->req.port_id.port_id,
>  	    ct_rsp->rsp.gpn_id.port_name);
>  
> +	if (res) {
> +		sp->free(sp);
> +		return;
> +	}
> +
>  	memset(&ea, 0, sizeof(ea));
>  	memcpy(ea.port_name, ct_rsp->rsp.gpn_id.port_name, WWN_SIZE);
>  	ea.sp = sp;
> 
Reviewed-by: Hannes Reinecke <hare@suse.com>

Cheers,

Hannes
-- 
Dr. Hannes Reinecke		   Teamlead Storage & Networking
hare@suse.de			               +49 911 74053 688
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: F. Imendörffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
HRB 21284 (AG Nürnberg)

^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: [PATCH v2 03/22] qla2xxx: Move session delete to driver work queue
  2017-11-30  3:40 ` [PATCH v2 03/22] qla2xxx: Move session delete to driver work queue Himanshu Madhani
@ 2017-11-30 15:48   ` Hannes Reinecke
  0 siblings, 0 replies; 47+ messages in thread
From: Hannes Reinecke @ 2017-11-30 15:48 UTC (permalink / raw)
  To: Himanshu Madhani, James.Bottomley, martin.petersen; +Cc: linux-scsi

On 11/30/2017 04:40 AM, Himanshu Madhani wrote:
> From: Quinn Tran <quinn.tran@cavium.com>
> 
> Move session delete from system work queue to driver's
> work queue for in time processing.
> 
> Fixes: 726b85487067d ("qla2xxx: Add framework for async fabric discovery")
> Cc: <stable@vger.kernel.org> # 4.10+
> Signed-off-by: Quinn Tran <quinn.tran@cavium.com>
> Signed-off-by: Himanshu Madhani <himanshu.madhani@cavium.com>
> ---
>  drivers/scsi/qla2xxx/qla_os.c     | 3 ++-
>  drivers/scsi/qla2xxx/qla_target.c | 3 ++-
>  2 files changed, 4 insertions(+), 2 deletions(-)
> 
Reviewed-by: Hannes Reinecke <hare@suse.com>

Cheers,

Hannes
-- 
Dr. Hannes Reinecke		   Teamlead Storage & Networking
hare@suse.de			               +49 911 74053 688
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: F. Imendörffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
HRB 21284 (AG Nürnberg)

^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: [PATCH v2 04/22] qla2xxx: Skip IRQ affinity for Target QPairs
  2017-11-30  3:40 ` [PATCH v2 04/22] qla2xxx: Skip IRQ affinity for Target QPairs Himanshu Madhani
@ 2017-11-30 15:49   ` Hannes Reinecke
  0 siblings, 0 replies; 47+ messages in thread
From: Hannes Reinecke @ 2017-11-30 15:49 UTC (permalink / raw)
  To: Himanshu Madhani, James.Bottomley, martin.petersen; +Cc: linux-scsi

On 11/30/2017 04:40 AM, Himanshu Madhani wrote:
> From: Quinn Tran <quinn.tran@cavium.com>
> 
> Fix co-existence between Block MQ and Target Mode. Block MQ
> and initiator mode requires midlayer queue mapping to check
> for IRQ to be affinitize. For target mode, it's not the case.
> 
> Fixes: 09620eeb62c41 ("scsi: qla2xxx: Add debug knob for user control workload")
> Cc: <stable@vger.kernel.org> # 4.12+
> Signed-off-by: Quinn Tran <quinn.tran@cavium.com>
> Signed-off-by: Himanshu Madhani <himanshu.madhani@cavium.com>
> ---
>  drivers/scsi/qla2xxx/qla_os.c | 7 ++++++-
>  1 file changed, 6 insertions(+), 1 deletion(-)
> 
Reviewed-by: Hannes Reinecke <hare@suse.com>

Cheers,

Hannes
-- 
Dr. Hannes Reinecke		   Teamlead Storage & Networking
hare@suse.de			               +49 911 74053 688
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: F. Imendörffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
HRB 21284 (AG Nürnberg)

^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: [PATCH v2 05/22] qla2xxx: Fix re-login for Nport Handle in use
  2017-11-30  3:40 ` [PATCH v2 05/22] qla2xxx: Fix re-login for Nport Handle in use Himanshu Madhani
@ 2017-11-30 15:51   ` Hannes Reinecke
  2017-11-30 17:37     ` Madhani, Himanshu
  0 siblings, 1 reply; 47+ messages in thread
From: Hannes Reinecke @ 2017-11-30 15:51 UTC (permalink / raw)
  To: Himanshu Madhani, James.Bottomley, martin.petersen; +Cc: linux-scsi

On 11/30/2017 04:40 AM, Himanshu Madhani wrote:
> From: Quinn Tran <quinn.tran@cavium.com>
> 
> When NPort Handle is in use, driver needs to mark the handle
> as used and pick another. Instead, the code clears the handle
> and re-pick the same handle.
> 
> Fixes: 726b85487067d ("qla2xxx: Add framework for async fabric discovery")
> Cc: <stable@vger.kernel.org> # 4.10+
> Signed-off-by: Quinn Tran <quinn.tran@cavium.com>
> Signed-off-by: Himanshu Madhani <himanshu.madhani@cavium.com>
> ---
>  drivers/scsi/qla2xxx/qla_gs.c   | 16 ++++++++++-----
>  drivers/scsi/qla2xxx/qla_init.c | 44 +++++++++++++++++++++++++++++++++++++----
>  drivers/scsi/qla2xxx/qla_isr.c  |  5 -----
>  3 files changed, 51 insertions(+), 14 deletions(-)
> 
> diff --git a/drivers/scsi/qla2xxx/qla_gs.c b/drivers/scsi/qla2xxx/qla_gs.c
> index ddc69d36877e..8984f857bb34 100644
> --- a/drivers/scsi/qla2xxx/qla_gs.c
> +++ b/drivers/scsi/qla2xxx/qla_gs.c
> @@ -2833,7 +2833,7 @@ void qla24xx_handle_gidpn_event(scsi_qla_host_t *vha, struct event_arg *ea)
>  				}
>  			} else { /* fcport->d_id.b24 != ea->id.b24 */
>  				fcport->d_id.b24 = ea->id.b24;
> -				if (fcport->deleted == QLA_SESS_DELETED) {
> +				if (fcport->deleted != QLA_SESS_DELETED) {
>  					ql_dbg(ql_dbg_disc, vha, 0x2021,
>  					    "%s %d %8phC post del sess\n",
>  					    __func__, __LINE__, fcport->port_name);
> @@ -3206,10 +3206,16 @@ static void qla2x00_async_gpnid_sp_done(void *s, int res)
>  	struct event_arg ea;
>  	struct qla_work_evt *e;
>  
> -	ql_dbg(ql_dbg_disc, vha, 0x2066,
> -	    "Async done-%s res %x ID %3phC. %8phC\n",
> -	    sp->name, res, ct_req->req.port_id.port_id,
> -	    ct_rsp->rsp.gpn_id.port_name);
> +	if (res)
> +		ql_dbg(ql_dbg_disc, vha, 0x2066,
> +		    "Async done-%s fail res %x ID %3phC. %8phC\n",
> +		    sp->name, res, ct_req->req.port_id.port_id,
> +		    ct_rsp->rsp.gpn_id.port_name);
> +	else
> +		ql_dbg(ql_dbg_disc, vha, 0x2066,
> +		    "Async done-%s good ID %3phC. %8phC\n",
> +		    sp->name, ct_req->req.port_id.port_id,
> +		    ct_rsp->rsp.gpn_id.port_name);
>  
>  	if (res) {
>  		sp->free(sp);
> diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c
> index 1bafa043f9f1..be4c67b465b8 100644
> --- a/drivers/scsi/qla2xxx/qla_init.c
> +++ b/drivers/scsi/qla2xxx/qla_init.c
> @@ -1452,6 +1452,8 @@ static void
>  qla24xx_handle_plogi_done_event(struct scsi_qla_host *vha, struct event_arg *ea)
>  {
>  	port_id_t cid;	/* conflict Nport id */
> +	u16 lid;
> +	struct fc_port *conflict_fcport;
>  
>  	switch (ea->data[0]) {
>  	case MBS_COMMAND_COMPLETE:
> @@ -1467,8 +1469,12 @@ qla24xx_handle_plogi_done_event(struct scsi_qla_host *vha, struct event_arg *ea)
>  			qla24xx_post_prli_work(vha, ea->fcport);
>  		} else {
>  			ql_dbg(ql_dbg_disc, vha, 0x20ea,
> -				"%s %d %8phC post gpdb\n",
> -				__func__, __LINE__, ea->fcport->port_name);
> +			    "%s %d %8phC LoopID 0x%x in use with %06x. post gnl\n",
> +			    __func__, __LINE__, ea->fcport->port_name,
> +			    ea->fcport->loop_id, ea->fcport->d_id.b24);
> +
> +			set_bit(ea->fcport->loop_id, vha->hw->loop_id_map);
> +			ea->fcport->loop_id = FC_NO_LOOP_ID;
>  			ea->fcport->chip_reset = vha->hw->base_qpair->chip_reset;
>  			ea->fcport->logout_on_delete = 1;
>  			ea->fcport->send_els_logo = 0;
> @@ -1513,8 +1519,38 @@ qla24xx_handle_plogi_done_event(struct scsi_qla_host *vha, struct event_arg *ea)
>  		    ea->fcport->d_id.b.domain, ea->fcport->d_id.b.area,
>  		    ea->fcport->d_id.b.al_pa);
>  
> -		qla2x00_clear_loop_id(ea->fcport);
> -		qla24xx_post_gidpn_work(vha, ea->fcport);
> +		lid = ea->iop[1] & 0xffff;
> +		qlt_find_sess_invalidate_other(vha,
> +		    wwn_to_u64(ea->fcport->port_name),
> +		    ea->fcport->d_id, lid, &conflict_fcport);
> +
> +		if (conflict_fcport) {
> +			/*
> +			 * Another fcport share the same loop_id/nport id.
> +			 * Conflict fcport needs to finish cleanup before this
> +			 * fcport can proceed to login.
> +			 */
> +			conflict_fcport->conflict = ea->fcport;
> +			ea->fcport->login_pause = 1;
> +
> +			ql_dbg(ql_dbg_disc, vha, 0x20ed,
> +			    "%s %d %8phC NPortId %06x inuse with loopid 0x%x. post gidpn\n",
> +			    __func__, __LINE__, ea->fcport->port_name,
> +			    ea->fcport->d_id.b24, lid);
> +			qla2x00_clear_loop_id(ea->fcport);
> +			qla24xx_post_gidpn_work(vha, ea->fcport);
> +		} else {
> +			ql_dbg(ql_dbg_disc, vha, 0x20ed,
> +			    "%s %d %8phC NPortId %06x inuse with loopid 0x%x. sched delete\n",
> +			    __func__, __LINE__, ea->fcport->port_name,
> +			    ea->fcport->d_id.b24, lid);
> +
> +			qla2x00_clear_loop_id(ea->fcport);
> +			set_bit(lid, vha->hw->loop_id_map);
> +			ea->fcport->loop_id = lid;
> +			ea->fcport->keep_nport_handle = 0;
> +			qlt_schedule_sess_for_deletion(ea->fcport, false);
> +		}
>  		break;
>  	}
>  	return;
> diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c
> index 2fd79129bb2a..545c527263d0 100644
> --- a/drivers/scsi/qla2xxx/qla_isr.c
> +++ b/drivers/scsi/qla2xxx/qla_isr.c
> @@ -2369,7 +2369,6 @@ qla2x00_status_entry(scsi_qla_host_t *vha, struct rsp_que *rsp, void *pkt)
>  	int res = 0;
>  	uint16_t state_flags = 0;
>  	uint16_t retry_delay = 0;
> -	uint8_t no_logout = 0;
>  
>  	sts = (sts_entry_t *) pkt;
>  	sts24 = (struct sts_entry_24xx *) pkt;
> @@ -2640,7 +2639,6 @@ qla2x00_status_entry(scsi_qla_host_t *vha, struct rsp_que *rsp, void *pkt)
>  		break;
>  
>  	case CS_PORT_LOGGED_OUT:
> -		no_logout = 1;
>  	case CS_PORT_CONFIG_CHG:
>  	case CS_PORT_BUSY:
>  	case CS_INCOMPLETE:
> @@ -2671,9 +2669,6 @@ qla2x00_status_entry(scsi_qla_host_t *vha, struct rsp_que *rsp, void *pkt)
>  				port_state_str[atomic_read(&fcport->state)],
>  				comp_status);
>  
> -			if (no_logout)
> -				fcport->logout_on_delete = 0;
> -
>  			qla2x00_mark_device_lost(fcport->vha, fcport, 1, 1);
>  			qlt_schedule_sess_for_deletion_lock(fcport);
>  		}
> 
Does this really belong to the above patch?
It looks to me as if it fixes a completely different issue...

Cheers,

Hannes
-- 
Dr. Hannes Reinecke		   Teamlead Storage & Networking
hare@suse.de			               +49 911 74053 688
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: F. Imendörffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
HRB 21284 (AG Nürnberg)

^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: [PATCH v2 06/22] qla2xxx: Retry switch command on time out
  2017-11-30  3:40 ` [PATCH v2 06/22] qla2xxx: Retry switch command on time out Himanshu Madhani
@ 2017-11-30 15:52   ` Hannes Reinecke
  0 siblings, 0 replies; 47+ messages in thread
From: Hannes Reinecke @ 2017-11-30 15:52 UTC (permalink / raw)
  To: Himanshu Madhani, James.Bottomley, martin.petersen; +Cc: linux-scsi

On 11/30/2017 04:40 AM, Himanshu Madhani wrote:
> From: Quinn Tran <quinn.tran@cavium.com>
> 
> Retry GID_PN & GPN_ID switch commands for time out case.
> 
> Fixes: 726b85487067d ("qla2xxx: Add framework for async fabric discovery")
> Cc: <stable@vger.kernel.org> # 4.10+
> Signed-off-by: Quinn Tran <quinn.tran@cavium.com>
> Signed-off-by: Himanshu Madhani <himanshu.madhani@cavium.com>
> ---
>  drivers/scsi/qla2xxx/qla_gs.c | 34 ++++++++++++++++++++++++++--------
>  1 file changed, 26 insertions(+), 8 deletions(-)
> 
Reviewed-by: Hannes Reinecke <hare@suse.com>

Cheers,

Hannes
-- 
Dr. Hannes Reinecke		   Teamlead Storage & Networking
hare@suse.de			               +49 911 74053 688
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: F. Imendörffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
HRB 21284 (AG Nürnberg)

^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: [PATCH v2 07/22] qla2xxx: Serialize GPNID for multiple RSCN
  2017-11-30  3:40 ` [PATCH v2 07/22] qla2xxx: Serialize GPNID for multiple RSCN Himanshu Madhani
@ 2017-11-30 15:53   ` Hannes Reinecke
  2017-11-30 17:39     ` Madhani, Himanshu
  0 siblings, 1 reply; 47+ messages in thread
From: Hannes Reinecke @ 2017-11-30 15:53 UTC (permalink / raw)
  To: Himanshu Madhani, James.Bottomley, martin.petersen; +Cc: linux-scsi

On 11/30/2017 04:40 AM, Himanshu Madhani wrote:
> From: Quinn Tran <quinn.tran@cavium.com>
> 
> GPNID is triggered by RSCN. For multiple RSCNs of the same
> affected NPORT ID, serialize the GPNID to prevent confusion.
> 
> Fixes: 726b85487067d ("qla2xxx: Add framework for async fabric discovery")
> Cc: <stable@vger.kernel.org> # 4.10+
> Signed-off-by: Quinn Tran <quinn.tran@cavium.com>
> Signed-off-by: Himanshu Madhani <himanshu.madhani@cavium.com>
> ---
>  drivers/scsi/qla2xxx/qla_def.h | 48 +++++++++++++++++++++++-------------------
>  drivers/scsi/qla2xxx/qla_gs.c  | 35 +++++++++++++++++++++++++-----
>  drivers/scsi/qla2xxx/qla_isr.c |  2 +-
>  drivers/scsi/qla2xxx/qla_os.c  |  1 +
>  4 files changed, 58 insertions(+), 28 deletions(-)
> 
[ .. ]
> @@ -3242,11 +3243,20 @@ static void qla2x00_async_gpnid_sp_done(void *s, int res)
>  	ea.rc = res;
>  	ea.event = FCME_GPNID_DONE;
>  
> +	spin_lock_irqsave(&vha->hw->tgt.sess_lock, flags);
> +	list_del(&sp->elem);
> +	spin_unlock_irqrestore(&vha->hw->tgt.sess_lock, flags);
> +
>  	if (res) {
>  		if (res == QLA_FUNCTION_TIMEOUT)
>  			qla24xx_post_gpnid_work(sp->vha, &ea.id);
>  		sp->free(sp);
>  		return;
> +	} else if (sp->gen1) {
> +		/* There was anoter RSNC for this Nport ID */
> +		qla24xx_post_gpnid_work(sp->vha, &ea.id);
> +		sp->free(sp);
> +		return;
>  	}
>  
>  	qla2x00_fcport_event_handler(vha, &ea);
Two spelling errors in one line ...

Cheers,

Hannes
-- 
Dr. Hannes Reinecke		   Teamlead Storage & Networking
hare@suse.de			               +49 911 74053 688
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: F. Imendörffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
HRB 21284 (AG Nürnberg)

^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: [PATCH v2 08/22] qla2xxx: Fix login state machine stuck at GPDB
  2017-11-30  3:40 ` [PATCH v2 08/22] qla2xxx: Fix login state machine stuck at GPDB Himanshu Madhani
@ 2017-11-30 15:54   ` Hannes Reinecke
  0 siblings, 0 replies; 47+ messages in thread
From: Hannes Reinecke @ 2017-11-30 15:54 UTC (permalink / raw)
  To: Himanshu Madhani, James.Bottomley, martin.petersen; +Cc: linux-scsi

On 11/30/2017 04:40 AM, Himanshu Madhani wrote:
> From: Quinn Tran <quinn.tran@cavium.com>
> 
> This patch returns discovery state machine back to
> Login Complete.
> 
> Fixes: 726b85487067d ("qla2xxx: Add framework for async fabric discovery")
> Cc: <stable@vger.kernel.org> # 4.10+
> Signed-off-by: Quinn Tran <quinn.tran@cavium.com>
> Signed-off-by: Himanshu Madhani <himanshu.madhani@cavium.com>
> ---
>  drivers/scsi/qla2xxx/qla_init.c | 11 ++++++++++-
>  1 file changed, 10 insertions(+), 1 deletion(-)
> 
Reviewed-by: Hannes Reinecke <hare@suse.com>

Cheers,

Hannes
-- 
Dr. Hannes Reinecke		   Teamlead Storage & Networking
hare@suse.de			               +49 911 74053 688
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: F. Imendörffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
HRB 21284 (AG Nürnberg)

^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: [PATCH v2 09/22] qla2xxx: Fix NPIV host cleanup in target mode
  2017-11-30  3:40 ` [PATCH v2 09/22] qla2xxx: Fix NPIV host cleanup in target mode Himanshu Madhani
@ 2017-11-30 15:55   ` Hannes Reinecke
  0 siblings, 0 replies; 47+ messages in thread
From: Hannes Reinecke @ 2017-11-30 15:55 UTC (permalink / raw)
  To: Himanshu Madhani, James.Bottomley, martin.petersen; +Cc: linux-scsi

On 11/30/2017 04:40 AM, Himanshu Madhani wrote:
> From: Sawan Chandak <sawan.chandak@cavium.com>
> 
> Add check to make sure we are cleaning up global target host
> list only for NPIV hosts
> 
> Fixes: bdbe24de281e2 ("scsi: qla2xxx: Cleanup NPIV host in target mode during config teardown")
> Cc: <stable@vger.kernel.org> # 4.10+
> Signed-off-by: Sawan Chandak <sawan.chandak@cavium.com>
> Signed-off-by: Himanshu Madhani <himanshu.madhani@cavium.com>
> ---
>  drivers/scsi/qla2xxx/qla_target.c | 7 +++++--
>  1 file changed, 5 insertions(+), 2 deletions(-)
> 
Reviewed-by: Hannes Reinecke <hare@suse.com>

Cheers,

Hannes
-- 
Dr. Hannes Reinecke		   Teamlead Storage & Networking
hare@suse.de			               +49 911 74053 688
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: F. Imendörffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
HRB 21284 (AG Nürnberg)

^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: [PATCH v2 10/22] qla2xxx: Relogin to target port on a cable swap
  2017-11-30  3:40 ` [PATCH v2 10/22] qla2xxx: Relogin to target port on a cable swap Himanshu Madhani
@ 2017-11-30 15:58   ` Hannes Reinecke
  0 siblings, 0 replies; 47+ messages in thread
From: Hannes Reinecke @ 2017-11-30 15:58 UTC (permalink / raw)
  To: Himanshu Madhani, James.Bottomley, martin.petersen; +Cc: linux-scsi

On 11/30/2017 04:40 AM, Himanshu Madhani wrote:
> From: Quinn Tran <quinn.tran@cavium.com>
> 
> If user swaps one target port for another target port for same
> switch port, the new target port is not being recognized by the
> driver. Current code assumes that old Target port has recovered
> from link down. The fix will ask switch what is the WWPN of a
> specific NportID (GPNID) rather than assuming it's the same Target
> port which has came back.
> 
> Fixes: 726b85487067d ("qla2xxx: Add framework for async fabric discovery")
> Cc: <stable@vger.kernel.org> # 4.10+
> Signed-off-by: Quinn Tran <quinn.tran@cavium.com>
> Signed-off-by: Himanshu Madhani <himanshu.madhani@cavium.com>
> ---
>  drivers/scsi/qla2xxx/qla_gs.c     | 164 ++++++++++++++++++++++++++++++--------
>  drivers/scsi/qla2xxx/qla_init.c   |   6 +-
>  drivers/scsi/qla2xxx/qla_os.c     |  35 +++++++-
>  drivers/scsi/qla2xxx/qla_target.c |  35 ++++++--
>  4 files changed, 194 insertions(+), 46 deletions(-)
> 
Reviewed-by: Hannes Reinecke <hare@suse.com>

Cheers,

Hannes
-- 
Dr. Hannes Reinecke		   Teamlead Storage & Networking
hare@suse.de			               +49 911 74053 688
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: F. Imendörffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
HRB 21284 (AG Nürnberg)

^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: [PATCH v2 11/22] qla2xxx: Fix Relogin being triggered too fast
  2017-11-30  3:40 ` [PATCH v2 11/22] qla2xxx: Fix Relogin being triggered too fast Himanshu Madhani
@ 2017-11-30 16:00   ` Hannes Reinecke
  0 siblings, 0 replies; 47+ messages in thread
From: Hannes Reinecke @ 2017-11-30 16:00 UTC (permalink / raw)
  To: Himanshu Madhani, James.Bottomley, martin.petersen; +Cc: linux-scsi

On 11/30/2017 04:40 AM, Himanshu Madhani wrote:
> From: Quinn Tran <quinn.tran@cavium.com>
> 
> Current driver design schedules relogin process via DPC thread
> every 1 second. In a large fabric, this DPC thread tries to
> schedule too many jobs and might get overloaded. As a result of
> this processing of DPC thread, it can schedule relogin earlier
> than 1 second.
> 
> Fixes: 726b85487067d ("qla2xxx: Add framework for async fabric discovery")
> Cc: <stable@vger.kernel.org> # 4.10+
> Signed-off-by: Quinn Tran <quinn.tran@cavium.com>
> Signed-off-by: Himanshu Madhani <himanshu.madhani@cavium.com>
> ---
>  drivers/scsi/qla2xxx/qla_def.h |  1 +
>  drivers/scsi/qla2xxx/qla_mid.c | 24 +++++++++++++++---------
>  drivers/scsi/qla2xxx/qla_os.c  | 22 ++++++++++++++--------
>  3 files changed, 30 insertions(+), 17 deletions(-)
> 
Reviewed-by: Hannes Reinecke <hare@suse.com>

Cheers,

Hannes
-- 
Dr. Hannes Reinecke		   Teamlead Storage & Networking
hare@suse.de			               +49 911 74053 688
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: F. Imendörffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
HRB 21284 (AG Nürnberg)

^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: [PATCH v2 12/22] qla2xxx: Clear send ELS LOGO flag after target re-login
  2017-11-30  3:40 ` [PATCH v2 12/22] qla2xxx: Clear send ELS LOGO flag after target re-login Himanshu Madhani
@ 2017-11-30 16:00   ` Hannes Reinecke
  0 siblings, 0 replies; 47+ messages in thread
From: Hannes Reinecke @ 2017-11-30 16:00 UTC (permalink / raw)
  To: Himanshu Madhani, James.Bottomley, martin.petersen; +Cc: linux-scsi

On 11/30/2017 04:40 AM, Himanshu Madhani wrote:
> From: Quinn Tran <quinn.tran@cavium.com>
> 
> This patch fixes clearing out els_send_logo flag at the
> time of session deletion.
> 
> Fixes: 3515832cc614 ("scsi: qla2xxx: Reset the logo flag, after target re-login.")
> Cc: <stable@vger.kernel.org> # 4.10+
> Signed-off-by: Quinn Tran <quinn.tran@cavium.com>
> Signed-off-by: Himanshu Madhani <himanshu.madhani@cavium.com>
> ---
>  drivers/scsi/qla2xxx/qla_target.c | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c
> index 283ff316e4b2..e824cdc77139 100644
> --- a/drivers/scsi/qla2xxx/qla_target.c
> +++ b/drivers/scsi/qla2xxx/qla_target.c
> @@ -983,6 +983,7 @@ static void qlt_free_session_done(struct work_struct *work)
>  			logo.id = sess->d_id;
>  			logo.cmd_count = 0;
>  			qlt_send_first_logo(vha, &logo);
> +			sess->send_els_logo = 0;
>  		}
>  
>  		if (sess->logout_on_delete) {
> 
Reviewed-by: Hannes Reinecke <hare@suse.com>

Cheers,

Hannes
-- 
Dr. Hannes Reinecke		   Teamlead Storage & Networking
hare@suse.de			               +49 911 74053 688
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: F. Imendörffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
HRB 21284 (AG Nürnberg)

^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: [PATCH v2 13/22] qla2xxx: Fix PRLI state check
  2017-11-30  3:40 ` [PATCH v2 13/22] qla2xxx: Fix PRLI state check Himanshu Madhani
@ 2017-11-30 16:02   ` Hannes Reinecke
  0 siblings, 0 replies; 47+ messages in thread
From: Hannes Reinecke @ 2017-11-30 16:02 UTC (permalink / raw)
  To: Himanshu Madhani, James.Bottomley, martin.petersen; +Cc: linux-scsi

On 11/30/2017 04:40 AM, Himanshu Madhani wrote:
> From: Quinn Tran <quinn.tran@cavium.com>
> 
> Get Port Database MBX cmd is to validate current Login state upon
> PRLI completion. Current code looks at the last login state for
> re-validation which was incorrect. This patch removed incorrect
> state check.
> 
> Fixes: 15f30a5752287 ("qla2xxx: Use IOCB interface to submit non-critical MBX.")
> Cc: <stable@vger.kernel.org> # 4.10+
> Signed-off-by: Quinn Tran <quinn.tran@cavium.com>
> Signed-off-by: Himanshu Madhani <himanshu.madhani@cavium.com>
> ---
>  drivers/scsi/qla2xxx/qla_mbx.c | 3 +--
>  1 file changed, 1 insertion(+), 2 deletions(-)
> 
> diff --git a/drivers/scsi/qla2xxx/qla_mbx.c b/drivers/scsi/qla2xxx/qla_mbx.c
> index cb717d47339f..e2b5fa47bb57 100644
> --- a/drivers/scsi/qla2xxx/qla_mbx.c
> +++ b/drivers/scsi/qla2xxx/qla_mbx.c
> @@ -6160,8 +6160,7 @@ int __qla24xx_parse_gpdb(struct scsi_qla_host *vha, fc_port_t *fcport,
>  	}
>  
>  	/* Check for logged in state. */
> -	if (current_login_state != PDS_PRLI_COMPLETE &&
> -	    last_login_state != PDS_PRLI_COMPLETE) {
> +	if (current_login_state != PDS_PRLI_COMPLETE) {
>  		ql_dbg(ql_dbg_mbx, vha, 0x119a,
>  		    "Unable to verify login-state (%x/%x) for loop_id %x.\n",
>  		    current_login_state, last_login_state, fcport->loop_id);
> 
Reviewed-by: Hannes Reinecke <hare@suse.com>

Cheers,

Hannes
-- 
Dr. Hannes Reinecke		   Teamlead Storage & Networking
hare@suse.de			               +49 911 74053 688
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: F. Imendörffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
HRB 21284 (AG Nürnberg)

^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: [PATCH v2 14/22] qla2xxx: Fix abort command deadlock due to spinlock
  2017-11-30  3:40 ` [PATCH v2 14/22] qla2xxx: Fix abort command deadlock due to spinlock Himanshu Madhani
@ 2017-11-30 16:19   ` Hannes Reinecke
  0 siblings, 0 replies; 47+ messages in thread
From: Hannes Reinecke @ 2017-11-30 16:19 UTC (permalink / raw)
  To: Himanshu Madhani, James.Bottomley, martin.petersen; +Cc: linux-scsi

On 11/30/2017 04:40 AM, Himanshu Madhani wrote:
> From: Quinn Tran <quinn.tran@cavium.com>
> 
> Original code acquires hardware_lock to add Abort IOCB
> onto driver's request queue for processing. However,
> abort_command() will also acquire hardware lock to look up
> sp pointer before issuing abort IOCB command resulting
> into a deadlock. This patch safely removes the possible
> deadlock scenario by removing extra spinlock.
> 
> Fixes: 6eb54715b54bb ("qla2xxx: Added interface to send explicit LOGO.")
> Cc: <stable@vger.kernel.org> # 4.10+
> Signed-off-by: Quinn Tran <quinn.tran@cavium.com>
> Signed-off-by: Himanshu Madhani <himanshu.madhani@cavium.com>
> ---
>  drivers/scsi/qla2xxx/qla_iocb.c | 3 ---
>  1 file changed, 3 deletions(-)
> 
> diff --git a/drivers/scsi/qla2xxx/qla_iocb.c b/drivers/scsi/qla2xxx/qla_iocb.c
> index d810a447cb4a..106f4ac4f733 100644
> --- a/drivers/scsi/qla2xxx/qla_iocb.c
> +++ b/drivers/scsi/qla2xxx/qla_iocb.c
> @@ -2394,7 +2394,6 @@ qla2x00_els_dcmd_iocb_timeout(void *data)
>  	struct scsi_qla_host *vha = sp->vha;
>  	struct qla_hw_data *ha = vha->hw;
>  	struct srb_iocb *lio = &sp->u.iocb_cmd;
> -	unsigned long flags = 0;
>  
>  	ql_dbg(ql_dbg_io, vha, 0x3069,
>  	    "%s Timeout, hdl=%x, portid=%02x%02x%02x\n",
> @@ -2402,7 +2401,6 @@ qla2x00_els_dcmd_iocb_timeout(void *data)
>  	    fcport->d_id.b.al_pa);
>  
>  	/* Abort the exchange */
> -	spin_lock_irqsave(&ha->hardware_lock, flags);
>  	if (ha->isp_ops->abort_command(sp)) {
>  		ql_dbg(ql_dbg_io, vha, 0x3070,
>  		    "mbx abort_command failed.\n");
> @@ -2410,7 +2408,6 @@ qla2x00_els_dcmd_iocb_timeout(void *data)
>  		ql_dbg(ql_dbg_io, vha, 0x3071,
>  		    "mbx abort_command success.\n");
>  	}
> -	spin_unlock_irqrestore(&ha->hardware_lock, flags);
>  
>  	complete(&lio->u.els_logo.comp);
>  }
> 
Reviewed-by: Hannes Reinecke <hare@suse.com>

Cheers,

Hannes
-- 
Dr. Hannes Reinecke		   Teamlead Storage & Networking
hare@suse.de			               +49 911 74053 688
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: F. Imendörffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
HRB 21284 (AG Nürnberg)

^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: [PATCH v2 15/22] qla2xxx: Replace fcport alloc with qla2x00_alloc_fcport
  2017-11-30  3:40 ` [PATCH v2 15/22] qla2xxx: Replace fcport alloc with qla2x00_alloc_fcport Himanshu Madhani
@ 2017-11-30 16:19   ` Hannes Reinecke
  0 siblings, 0 replies; 47+ messages in thread
From: Hannes Reinecke @ 2017-11-30 16:19 UTC (permalink / raw)
  To: Himanshu Madhani, James.Bottomley, martin.petersen; +Cc: linux-scsi

On 11/30/2017 04:40 AM, Himanshu Madhani wrote:
> From: Quinn Tran <quinn.tran@cavium.com>
> 
> Current code manually allocate an fcport structure that
> is not properly initialize. Replace kzalloc with
> qla2x00_alloc_fcport, so that all fields are initialized.
> Also set set scan flag to port found
> 
> Cc: <stable@vger.kernel.org>
> Signed-off-by: Quinn Tran <quinn.tran@cavium.com>
> Signed-off-by: Himanshu Madhani <himanshu.madhani@cavium.com>
> ---
>  drivers/scsi/qla2xxx/qla_target.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c
> index e824cdc77139..2a6242d97a7e 100644
> --- a/drivers/scsi/qla2xxx/qla_target.c
> +++ b/drivers/scsi/qla2xxx/qla_target.c
> @@ -5783,7 +5783,7 @@ static fc_port_t *qlt_get_port_database(struct scsi_qla_host *vha,
>  	unsigned long flags;
>  	u8 newfcport = 0;
>  
> -	fcport = kzalloc(sizeof(*fcport), GFP_KERNEL);
> +	fcport = qla2x00_alloc_fcport(vha, GFP_KERNEL);
>  	if (!fcport) {
>  		ql_dbg(ql_dbg_tgt_mgt, vha, 0xf06f,
>  		    "qla_target(%d): Allocation of tmp FC port failed",
> 
Reviewed-by: Hannes Reinecke <hare@suse.com>

Cheers,

Hannes
-- 
Dr. Hannes Reinecke		   Teamlead Storage & Networking
hare@suse.de			               +49 911 74053 688
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: F. Imendörffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
HRB 21284 (AG Nürnberg)

^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: [PATCH v2 16/22] qla2xxx: Fix scan state field for fcport
  2017-11-30  3:40 ` [PATCH v2 16/22] qla2xxx: Fix scan state field for fcport Himanshu Madhani
@ 2017-11-30 16:20   ` Hannes Reinecke
  0 siblings, 0 replies; 47+ messages in thread
From: Hannes Reinecke @ 2017-11-30 16:20 UTC (permalink / raw)
  To: Himanshu Madhani, James.Bottomley, martin.petersen; +Cc: linux-scsi

On 11/30/2017 04:40 AM, Himanshu Madhani wrote:
> From: Quinn Tran <quinn.tran@cavium.com>
> 
> Add correct value of scan_state field indicating state
> of the FC port
> 
> Fixes: 726b85487067d ("qla2xxx: Add framework for async fabric discovery")
> Cc: <stable@vger.kernel.org> # 4.10+
> Signed-off-by: Quinn Tran <quinn.tran@cavium.com>
> Signed-off-by: Himanshu Madhani <himanshu.madhani@cavium.com>
> ---
>  drivers/scsi/qla2xxx/qla_target.c | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c
> index 2a6242d97a7e..1c219998ab60 100644
> --- a/drivers/scsi/qla2xxx/qla_target.c
> +++ b/drivers/scsi/qla2xxx/qla_target.c
> @@ -5812,6 +5812,7 @@ static fc_port_t *qlt_get_port_database(struct scsi_qla_host *vha,
>  		tfcp->port_type = fcport->port_type;
>  		tfcp->supported_classes = fcport->supported_classes;
>  		tfcp->flags |= fcport->flags;
> +		tfcp->scan_state = QLA_FCPORT_FOUND;
>  
>  		del = fcport;
>  		fcport = tfcp;
> 
Reviewed-by: Hannes Reinecke <hare@suse.com>

Cheers,

Hannes
-- 
Dr. Hannes Reinecke		   Teamlead Storage & Networking
hare@suse.de			               +49 911 74053 688
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: F. Imendörffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
HRB 21284 (AG Nürnberg)

^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: [PATCH v2 17/22] qla2xxx: Clear loop id after delete
  2017-11-30  3:40 ` [PATCH v2 17/22] qla2xxx: Clear loop id after delete Himanshu Madhani
@ 2017-11-30 16:20   ` Hannes Reinecke
  0 siblings, 0 replies; 47+ messages in thread
From: Hannes Reinecke @ 2017-11-30 16:20 UTC (permalink / raw)
  To: Himanshu Madhani, James.Bottomley, martin.petersen; +Cc: linux-scsi

On 11/30/2017 04:40 AM, Himanshu Madhani wrote:
> From: Quinn Tran <quinn.tran@cavium.com>
> 
> clear loop id after delete to prevent session invalidation
> of stale session.
> 
> Fixes: 726b85487067d ("qla2xxx: Add framework for async fabric discovery")
> Cc: <stable@vger.kernel.org> # 4.10+
> Signed-off-by: Quinn Tran <quinn.tran@cavium.com>
> Signed-off-by: Himanshu Madhani <himanshu.madhani@cavium.com>
> ---
>  drivers/scsi/qla2xxx/qla_target.c | 9 ++++-----
>  1 file changed, 4 insertions(+), 5 deletions(-)
> 
Reviewed-by: Hannes Reinecke <hare@suse.com>

Cheers,

Hannes
-- 
Dr. Hannes Reinecke		   Teamlead Storage & Networking
hare@suse.de			               +49 911 74053 688
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: F. Imendörffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
HRB 21284 (AG Nürnberg)

^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: [PATCH v2 18/22] qla2xxx: Defer processing of GS IOCB calls
  2017-11-30  3:40 ` [PATCH v2 18/22] qla2xxx: Defer processing of GS IOCB calls Himanshu Madhani
@ 2017-11-30 16:21   ` Hannes Reinecke
  0 siblings, 0 replies; 47+ messages in thread
From: Hannes Reinecke @ 2017-11-30 16:21 UTC (permalink / raw)
  To: Himanshu Madhani, James.Bottomley, martin.petersen; +Cc: linux-scsi

On 11/30/2017 04:40 AM, Himanshu Madhani wrote:
> From: Giridhar Malavali <giridhar.malavali@cavium.com>
> 
> This patch defers processing of GS IOCB calls from interrupt
> context to avoid hardware spinlock recursion.
> 
> Following stack trace is seen
> 
> ? mod_timer+0x193/0x330
> ? ql_dbg+0xa7/0xf0 [qla2xxx]
> _raw_spin_lock_irqsave+0x31/0x40
> qla2x00_start_sp+0x3b/0x250 [qla2xxx]
> qla24xx_async_gnl+0x1d3/0x240 [qla2xxx]
> qla24xx_fcport_handle_login+0x285/0x290 [qla2xxx]
> ? vprintk_func+0x20/0x50
> 
> Fixes: 726b85487067d ("qla2xxx: Add framework for async fabric discovery")
> Cc: <stable@vger.kernel.org> # 4.10+
> Signed-off-by: Giridhar Malavali <giridhar.malavali@cavium.com>
> Signed-off-by: Himanshu Madhani <himanshu.madhani@cavium.com>
> ---
>  drivers/scsi/qla2xxx/qla_init.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c
> index 7dd19785f820..57b8f43c5980 100644
> --- a/drivers/scsi/qla2xxx/qla_init.c
> +++ b/drivers/scsi/qla2xxx/qla_init.c
> @@ -975,7 +975,7 @@ int qla24xx_fcport_handle_login(struct scsi_qla_host *vha, fc_port_t *fcport)
>  			ql_dbg(ql_dbg_disc, vha, 0x20bd,
>  			    "%s %d %8phC post gnl\n",
>  			    __func__, __LINE__, fcport->port_name);
> -			qla24xx_async_gnl(vha, fcport);
> +			qla24xx_post_gnl_work(vha, fcport);
>  		} else {
>  			ql_dbg(ql_dbg_disc, vha, 0x20bf,
>  			    "%s %d %8phC post login\n",
> @@ -1143,7 +1143,7 @@ void qla24xx_handle_relogin_event(scsi_qla_host_t *vha,
>  		ql_dbg(ql_dbg_disc, vha, 0x20e9, "%s %d %8phC post gidpn\n",
>  		    __func__, __LINE__, fcport->port_name);
>  
> -		qla24xx_async_gidpn(vha, fcport);
> +		qla24xx_post_gidpn_work(vha, fcport);
>  		return;
>  	}
>  
> 
Reviewed-by: Hannes Reinecke <hare@suse.com>

Cheers,

Hannes
-- 
Dr. Hannes Reinecke		   Teamlead Storage & Networking
hare@suse.de			               +49 911 74053 688
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: F. Imendörffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
HRB 21284 (AG Nürnberg)

^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: [PATCH v2 19/22] qla2xxx: Remove aborting ELS IOCB call issued as part of timeout.
  2017-11-30  3:40 ` [PATCH v2 19/22] qla2xxx: Remove aborting ELS IOCB call issued as part of timeout Himanshu Madhani
@ 2017-11-30 16:23   ` Hannes Reinecke
  0 siblings, 0 replies; 47+ messages in thread
From: Hannes Reinecke @ 2017-11-30 16:23 UTC (permalink / raw)
  To: Himanshu Madhani, James.Bottomley, martin.petersen; +Cc: linux-scsi

On 11/30/2017 04:40 AM, Himanshu Madhani wrote:
> From: Giridhar Malavali <giridhar.malavali@cavium.com>
> 
> This fix the spinlock recursion issue seen while unloading the driver.
> 
> 14 [ffff9f2e21e03db8] native_queued_spin_lock_slowpath at ffffffffad0d8802
> 15 [ffff9f2e21e03dc0] do_raw_spin_lock at ffffffffad0d99e4
> 16 [ffff9f2e21e03dd8] _raw_spin_lock_irqsave at ffffffffad652471
> 17 [ffff9f2e21e03e00] qla2x00_els_dcmd_iocb_timeout at ffffffffc070cd63
> 18 [ffff9f2e21e03e40] qla2x00_sp_timeout at ffffffffc06f06d3 [qla2xxx]
> 19 [ffff9f2e21e03e68] call_timer_fn at ffffffffad0f97d8
> 20 [ffff9f2e21e03ed8] run_timer_softirq at ffffffffad0faf47
> 21 [ffff9f2e21e03f68] __softirqentry_text_start at ffffffffad655f32
> 
> Fixes: 6eb54715b54bb ("qla2xxx: Added interface to send explicit LOGO.")
> Cc: <stable@vger.kernel.org> # 4.10+
> Signed-off-by: Giridhar Malavali <giridhar.malavali@cavium.com>
> Signed-off-by: Himanshu Madhani <himanshu.madhani@cavium.com>
> ---
>  drivers/scsi/qla2xxx/qla_iocb.c | 10 ----------
>  1 file changed, 10 deletions(-)
> 
> diff --git a/drivers/scsi/qla2xxx/qla_iocb.c b/drivers/scsi/qla2xxx/qla_iocb.c
> index 106f4ac4f733..8ea59586f4f1 100644
> --- a/drivers/scsi/qla2xxx/qla_iocb.c
> +++ b/drivers/scsi/qla2xxx/qla_iocb.c
> @@ -2392,7 +2392,6 @@ qla2x00_els_dcmd_iocb_timeout(void *data)
>  	srb_t *sp = data;
>  	fc_port_t *fcport = sp->fcport;
>  	struct scsi_qla_host *vha = sp->vha;
> -	struct qla_hw_data *ha = vha->hw;
>  	struct srb_iocb *lio = &sp->u.iocb_cmd;
>  
>  	ql_dbg(ql_dbg_io, vha, 0x3069,
> @@ -2400,15 +2399,6 @@ qla2x00_els_dcmd_iocb_timeout(void *data)
>  	    sp->name, sp->handle, fcport->d_id.b.domain, fcport->d_id.b.area,
>  	    fcport->d_id.b.al_pa);
>  
> -	/* Abort the exchange */
> -	if (ha->isp_ops->abort_command(sp)) {
> -		ql_dbg(ql_dbg_io, vha, 0x3070,
> -		    "mbx abort_command failed.\n");
> -	} else {
> -		ql_dbg(ql_dbg_io, vha, 0x3071,
> -		    "mbx abort_command success.\n");
> -	}
> -
>  	complete(&lio->u.els_logo.comp);
>  }
>  
> 
Reviewed-by: Hannes Reinecke <hare@suse.com>

Cheers,

Hannes
-- 
Dr. Hannes Reinecke		   Teamlead Storage & Networking
hare@suse.de			               +49 911 74053 688
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: F. Imendörffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
HRB 21284 (AG Nürnberg)

^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: [PATCH v2 20/22] qla2xxx: Fix system crash in qlt_plogi_ack_unref
  2017-11-30  3:40 ` [PATCH v2 20/22] qla2xxx: Fix system crash in qlt_plogi_ack_unref Himanshu Madhani
@ 2017-11-30 16:24   ` Hannes Reinecke
  0 siblings, 0 replies; 47+ messages in thread
From: Hannes Reinecke @ 2017-11-30 16:24 UTC (permalink / raw)
  To: Himanshu Madhani, James.Bottomley, martin.petersen; +Cc: linux-scsi

On 11/30/2017 04:40 AM, Himanshu Madhani wrote:
> From: Quinn Tran <quinn.tran@cavium.com>
> 
> Fix system crash due to NULL pointer access.
> 
> qlt_plogi_ack_t and fc_port structures were not properly
> bound before calling qlt_plogi_ack_unref().
> 
> RIP: 0010:qlt_plogi_ack_unref+0xa1/0x150 [qla2xxx]
> Call Trace:
> qla24xx_create_new_sess+0xb1/0x320 [qla2xxx]
> qla2x00_do_work+0x123/0x260 [qla2xxx]
> qla2x00_iocb_work_fn+0x30/0x40 [qla2xxx]
> process_one_work+0x1f3/0x530
> worker_thread+0x4e/0x480
> kthread+0x10c/0x140
> 
> Fixes: 726b85487067d ("qla2xxx: Add framework for async fabric discovery")
> Cc: <stable@vger.kernel.org> # 4.10+
> Signed-off-by: Quinn Tran <quinn.tran@cavium.com>
> Signed-off-by: Giridhar Malavali <giridhar.malavali@cavium.com>
> Signed-off-by: Himanshu Madhani <himanshu.madhani@cavium.com>
> ---
>  drivers/scsi/qla2xxx/qla_os.c | 10 +++++-----
>  1 file changed, 5 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c
> index 2ec77b9f78b8..789030c9dd26 100644
> --- a/drivers/scsi/qla2xxx/qla_os.c
> +++ b/drivers/scsi/qla2xxx/qla_os.c
> @@ -4750,11 +4750,11 @@ void qla24xx_create_new_sess(struct scsi_qla_host *vha, struct qla_work_evt *e)
>  		} else {
>  			list_add_tail(&fcport->list, &vha->vp_fcports);
>  
> -			if (pla) {
> -				qlt_plogi_ack_link(vha, pla, fcport,
> -				    QLT_PLOGI_LINK_SAME_WWN);
> -				pla->ref_count--;
> -			}
> +		}
> +		if (pla) {
> +			qlt_plogi_ack_link(vha, pla, fcport,
> +			    QLT_PLOGI_LINK_SAME_WWN);
> +			pla->ref_count--;
>  		}
>  	}
>  	spin_unlock_irqrestore(&vha->hw->tgt.sess_lock, flags);
> 
Reviewed-by: Hannes Reinecke <hare@suse.com>

Cheers,

Hannes
-- 
Dr. Hannes Reinecke		   Teamlead Storage & Networking
hare@suse.de			               +49 911 74053 688
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: F. Imendörffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
HRB 21284 (AG Nürnberg)

^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: [PATCH v2 21/22] qla2xxx: Fix memory leak in dual/target mode
  2017-11-30  3:40 ` [PATCH v2 21/22] qla2xxx: Fix memory leak in dual/target mode Himanshu Madhani
@ 2017-11-30 16:25   ` Hannes Reinecke
  0 siblings, 0 replies; 47+ messages in thread
From: Hannes Reinecke @ 2017-11-30 16:25 UTC (permalink / raw)
  To: Himanshu Madhani, James.Bottomley, martin.petersen; +Cc: linux-scsi

On 11/30/2017 04:40 AM, Himanshu Madhani wrote:
> When driver is loaded in Target/Dual mode, it creates QPair
> to support MQ and allocates resources for each QPair. This Qpair
> initialization is delayed until the FW personality is changed to
> Dual/Target mode by issuing chip reset. At the time of chip reset
> firmware is re-initilized in correct personality all the QPairs
> are initialized by sending MBC_INITIALIZE_MULTIQ (001Fh).
> 
> This patch fixes memory leak by adding check to issue
> MBC_INITIALIZE_MULTIQ command only while deleting rsp/req queue
> when the flag is set for initiator mode, and clean up QPair resources
> correctly during the driver unload. This MBX does not need to be
> issued for Target/Dual mode because chip reset will reset ISP.
> 
> Fixes: d65237c7f0860 ("scsi: qla2xxx: Fix mailbox failure while deleting Queue pairs")
> Cc: <stable@vger.kernel.org> # 4.10+
> Signed-off-by: Himanshu Madhani <himanshu.madhani@cavium.com>
> ---
>  drivers/scsi/qla2xxx/qla_init.c |  4 +---
>  drivers/scsi/qla2xxx/qla_mid.c  | 18 ++++++++++--------
>  2 files changed, 11 insertions(+), 11 deletions(-)
> 
> diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c
> index 57b8f43c5980..58663df38627 100644
> --- a/drivers/scsi/qla2xxx/qla_init.c
> +++ b/drivers/scsi/qla2xxx/qla_init.c
> @@ -8220,9 +8220,6 @@ int qla2xxx_delete_qpair(struct scsi_qla_host *vha, struct qla_qpair *qpair)
>  	int ret = QLA_FUNCTION_FAILED;
>  	struct qla_hw_data *ha = qpair->hw;
>  
> -	if (!vha->flags.qpairs_req_created && !vha->flags.qpairs_rsp_created)
> -		goto fail;
> -
>  	qpair->delete_in_progress = 1;
>  	while (atomic_read(&qpair->ref_count))
>  		msleep(500);
> @@ -8230,6 +8227,7 @@ int qla2xxx_delete_qpair(struct scsi_qla_host *vha, struct qla_qpair *qpair)
>  	ret = qla25xx_delete_req_que(vha, qpair->req);
>  	if (ret != QLA_SUCCESS)
>  		goto fail;
> +
>  	ret = qla25xx_delete_rsp_que(vha, qpair->rsp);
>  	if (ret != QLA_SUCCESS)
>  		goto fail;
> diff --git a/drivers/scsi/qla2xxx/qla_mid.c b/drivers/scsi/qla2xxx/qla_mid.c
> index 618ca272d01a..e538e6308885 100644
> --- a/drivers/scsi/qla2xxx/qla_mid.c
> +++ b/drivers/scsi/qla2xxx/qla_mid.c
> @@ -575,14 +575,15 @@ qla25xx_free_rsp_que(struct scsi_qla_host *vha, struct rsp_que *rsp)
>  int
>  qla25xx_delete_req_que(struct scsi_qla_host *vha, struct req_que *req)
>  {
> -	int ret = -1;
> +	int ret = QLA_SUCCESS;
>  
> -	if (req) {
> +	if (req && vha->flags.qpairs_req_created) {
>  		req->options |= BIT_0;
>  		ret = qla25xx_init_req_que(vha, req);
> +		if (ret != QLA_SUCCESS)
> +			return QLA_FUNCTION_FAILED;
>  	}
> -	if (ret == QLA_SUCCESS)
> -		qla25xx_free_req_que(vha, req);
> +	qla25xx_free_req_que(vha, req);
>  
>  	return ret;
>  }
> @@ -590,14 +591,15 @@ qla25xx_delete_req_que(struct scsi_qla_host *vha, struct req_que *req)
>  int
>  qla25xx_delete_rsp_que(struct scsi_qla_host *vha, struct rsp_que *rsp)
>  {
> -	int ret = -1;
> +	int ret = QLA_SUCCESS;
>  
> -	if (rsp) {
> +	if (rsp && vha->flags.qpairs_rsp_created) {
>  		rsp->options |= BIT_0;
>  		ret = qla25xx_init_rsp_que(vha, rsp);
> +		if (ret != QLA_SUCCESS)
> +			return QLA_FUNCTION_FAILED;
>  	}
> -	if (ret == QLA_SUCCESS)
> -		qla25xx_free_rsp_que(vha, rsp);
> +	qla25xx_free_rsp_que(vha, rsp);
>  
>  	return ret;
>  }
> 
Reviewed-by: Hannes Reinecke <hare@suse.com>

Cheers,

Hannes
-- 
Dr. Hannes Reinecke		   Teamlead Storage & Networking
hare@suse.de			               +49 911 74053 688
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: F. Imendörffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
HRB 21284 (AG Nürnberg)

^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: [PATCH v2 22/22] qla2xxx: Update driver version to 10.00.00.03-k
  2017-11-30  3:40 ` [PATCH v2 22/22] qla2xxx: Update driver version to 10.00.00.03-k Himanshu Madhani
@ 2017-11-30 16:25   ` Hannes Reinecke
  0 siblings, 0 replies; 47+ messages in thread
From: Hannes Reinecke @ 2017-11-30 16:25 UTC (permalink / raw)
  To: Himanshu Madhani, James.Bottomley, martin.petersen; +Cc: linux-scsi

On 11/30/2017 04:40 AM, Himanshu Madhani wrote:
> Signed-off-by: Himanshu Madhani <himanshu.madhani@cavium.com>
> ---
>  drivers/scsi/qla2xxx/qla_version.h | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/scsi/qla2xxx/qla_version.h b/drivers/scsi/qla2xxx/qla_version.h
> index b6ec02b96d3d..911b82226d13 100644
> --- a/drivers/scsi/qla2xxx/qla_version.h
> +++ b/drivers/scsi/qla2xxx/qla_version.h
> @@ -7,7 +7,7 @@
>  /*
>   * Driver version
>   */
> -#define QLA2XXX_VERSION      "10.00.00.02-k"
> +#define QLA2XXX_VERSION      "10.00.00.03-k"
>  
>  #define QLA_DRIVER_MAJOR_VER	10
>  #define QLA_DRIVER_MINOR_VER	0
> 
Reviewed-by: Hannes Reinecke <hare@suse.com>

Cheers,

Hannes
-- 
Dr. Hannes Reinecke		   Teamlead Storage & Networking
hare@suse.de			               +49 911 74053 688
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: F. Imendörffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
HRB 21284 (AG Nürnberg)

^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: [PATCH v2 05/22] qla2xxx: Fix re-login for Nport Handle in use
  2017-11-30 15:51   ` Hannes Reinecke
@ 2017-11-30 17:37     ` Madhani, Himanshu
  0 siblings, 0 replies; 47+ messages in thread
From: Madhani, Himanshu @ 2017-11-30 17:37 UTC (permalink / raw)
  To: Hannes Reinecke; +Cc: James Bottomley, Martin K . Petersen, linux-scsi

Hi Hannes, 

> On Nov 30, 2017, at 7:51 AM, Hannes Reinecke <hare@suse.de> wrote:
> 
> Does this really belong to the above patch?
> It looks to me as if it fixes a completely different issue...

This flag indicates firmware to purge all IO’s of a session instead of 
assuming FW will purge them.

if you prefer to have this as a separate patch. I can post v3 with new patch.

Thanks,
- Himanshu


^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: [PATCH v2 07/22] qla2xxx: Serialize GPNID for multiple RSCN
  2017-11-30 15:53   ` Hannes Reinecke
@ 2017-11-30 17:39     ` Madhani, Himanshu
  0 siblings, 0 replies; 47+ messages in thread
From: Madhani, Himanshu @ 2017-11-30 17:39 UTC (permalink / raw)
  To: Hannes Reinecke; +Cc: James Bottomley, Martin K . Petersen, linux-scsi


> On Nov 30, 2017, at 7:53 AM, Hannes Reinecke <hare@suse.de> wrote:
> 
> Two spelling errors in one line ...

Embarrassing.. Will fix them in v3

Thanks,
- Himanshu

^ permalink raw reply	[flat|nested] 47+ messages in thread

end of thread, other threads:[~2017-11-30 17:39 UTC | newest]

Thread overview: 47+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-11-30  3:40 [PATCH v2 00/22] qla2xxx: Bug fixes for 4.15-rc2 Himanshu Madhani
2017-11-30  3:40 ` [PATCH v2 01/22] qla2xxx: Fix system crash for Notify ack timeout handling Himanshu Madhani
2017-11-30 15:47   ` Hannes Reinecke
2017-11-30  3:40 ` [PATCH v2 02/22] qla2xxx: Fix gpnid error processing Himanshu Madhani
2017-11-30 15:48   ` Hannes Reinecke
2017-11-30  3:40 ` [PATCH v2 03/22] qla2xxx: Move session delete to driver work queue Himanshu Madhani
2017-11-30 15:48   ` Hannes Reinecke
2017-11-30  3:40 ` [PATCH v2 04/22] qla2xxx: Skip IRQ affinity for Target QPairs Himanshu Madhani
2017-11-30 15:49   ` Hannes Reinecke
2017-11-30  3:40 ` [PATCH v2 05/22] qla2xxx: Fix re-login for Nport Handle in use Himanshu Madhani
2017-11-30 15:51   ` Hannes Reinecke
2017-11-30 17:37     ` Madhani, Himanshu
2017-11-30  3:40 ` [PATCH v2 06/22] qla2xxx: Retry switch command on time out Himanshu Madhani
2017-11-30 15:52   ` Hannes Reinecke
2017-11-30  3:40 ` [PATCH v2 07/22] qla2xxx: Serialize GPNID for multiple RSCN Himanshu Madhani
2017-11-30 15:53   ` Hannes Reinecke
2017-11-30 17:39     ` Madhani, Himanshu
2017-11-30  3:40 ` [PATCH v2 08/22] qla2xxx: Fix login state machine stuck at GPDB Himanshu Madhani
2017-11-30 15:54   ` Hannes Reinecke
2017-11-30  3:40 ` [PATCH v2 09/22] qla2xxx: Fix NPIV host cleanup in target mode Himanshu Madhani
2017-11-30 15:55   ` Hannes Reinecke
2017-11-30  3:40 ` [PATCH v2 10/22] qla2xxx: Relogin to target port on a cable swap Himanshu Madhani
2017-11-30 15:58   ` Hannes Reinecke
2017-11-30  3:40 ` [PATCH v2 11/22] qla2xxx: Fix Relogin being triggered too fast Himanshu Madhani
2017-11-30 16:00   ` Hannes Reinecke
2017-11-30  3:40 ` [PATCH v2 12/22] qla2xxx: Clear send ELS LOGO flag after target re-login Himanshu Madhani
2017-11-30 16:00   ` Hannes Reinecke
2017-11-30  3:40 ` [PATCH v2 13/22] qla2xxx: Fix PRLI state check Himanshu Madhani
2017-11-30 16:02   ` Hannes Reinecke
2017-11-30  3:40 ` [PATCH v2 14/22] qla2xxx: Fix abort command deadlock due to spinlock Himanshu Madhani
2017-11-30 16:19   ` Hannes Reinecke
2017-11-30  3:40 ` [PATCH v2 15/22] qla2xxx: Replace fcport alloc with qla2x00_alloc_fcport Himanshu Madhani
2017-11-30 16:19   ` Hannes Reinecke
2017-11-30  3:40 ` [PATCH v2 16/22] qla2xxx: Fix scan state field for fcport Himanshu Madhani
2017-11-30 16:20   ` Hannes Reinecke
2017-11-30  3:40 ` [PATCH v2 17/22] qla2xxx: Clear loop id after delete Himanshu Madhani
2017-11-30 16:20   ` Hannes Reinecke
2017-11-30  3:40 ` [PATCH v2 18/22] qla2xxx: Defer processing of GS IOCB calls Himanshu Madhani
2017-11-30 16:21   ` Hannes Reinecke
2017-11-30  3:40 ` [PATCH v2 19/22] qla2xxx: Remove aborting ELS IOCB call issued as part of timeout Himanshu Madhani
2017-11-30 16:23   ` Hannes Reinecke
2017-11-30  3:40 ` [PATCH v2 20/22] qla2xxx: Fix system crash in qlt_plogi_ack_unref Himanshu Madhani
2017-11-30 16:24   ` Hannes Reinecke
2017-11-30  3:40 ` [PATCH v2 21/22] qla2xxx: Fix memory leak in dual/target mode Himanshu Madhani
2017-11-30 16:25   ` Hannes Reinecke
2017-11-30  3:40 ` [PATCH v2 22/22] qla2xxx: Update driver version to 10.00.00.03-k Himanshu Madhani
2017-11-30 16:25   ` Hannes Reinecke

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.