[PATCH 2/2] qla2xxx: Fix N2N link up hang

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



From: Quinn Tran <quinn.tran@xxxxxxxxxx>

Prevent driver from endless loop or hang in the case of
NPort ID change.

Following stack trace is seen

Feb 12 08:21:17 localhost kernel: Call Trace:
Feb 12 08:21:17 localhost kernel: ? __schedule+0x254/0x840
Feb 12 08:21:17 localhost kernel: ? up+0x12/0x50
Feb 12 08:21:17 localhost kernel: schedule+0x28/0x70
Feb 12 08:21:17 localhost kernel: schedule_timeout+0x26d/0x390
Feb 12 08:21:17 localhost kernel: ? vprintk_emit+0x1e2/0x450
Feb 12 08:21:17 localhost kernel: wait_for_completion+0x11f/0x190
Feb 12 08:21:17 localhost kernel: ? wake_up_q+0x70/0x70
Feb 12 08:21:17 localhost kernel: flush_workqueue+0x14d/0x440
Feb 12 08:21:17 localhost kernel: qla2x00_wait_for_sess_deletion+0x98/0x1e0 [qla2xxx]
Feb 12 08:21:17 localhost kernel: ? qla2x00_abort_all_cmds+0x42/0x60 [qla2xxx]
Feb 12 08:21:17 localhost kernel: qla2x00_remove_one+0x12c/0x410 [qla2xxx]
Feb 12 08:21:17 localhost kernel: pci_device_remove+0x3b/0xc0
Feb 12 08:21:17 localhost kernel: device_release_driver_internal+0x180/0x250
Feb 12 08:21:17 localhost kernel: driver_detach+0x39/0x6d
Feb 12 08:21:17 localhost kernel: bus_remove_driver+0x74/0xc6
Feb 12 08:21:17 localhost kernel: pci_unregister_driver+0x2a/0xa0
Feb 12 08:21:17 localhost kernel: qla2x00_module_exit+0x2d/0x90 [qla2xxx]
Feb 12 08:21:17 localhost kernel: __x64_sys_delete_module+0x139/0x270
Feb 12 08:21:17 localhost kernel: do_syscall_64+0x5b/0x1b0
Feb 12 08:21:17 localhost kernel: entry_SYSCALL_64_after_hwframe+0x65/0xca
Feb 12 08:21:17 localhost kernel: RIP: 0033:0x7f48e887a3bb
Feb 12 08:21:17 localhost kernel: Code: Bad RIP value.
Feb 12 08:21:17 localhost kernel: RSP: 002b:00007ffc088da478 EFLAGS: 00000206 ORIG_RAX: 00000000000000b0

Fixes: 18b5110f8728 ("scsi: qla2xxx: Migrate NVME N2N handling into state machine")
Cc: stable@xxxxxxxxxxxxxxx # 4.19
Signed-off-by: Quinn Tran <quinn.tran@xxxxxxxxxx>
Signed-off-by: Himanshu Madhani <hmadhani@xxxxxxxxxxx>
---
 drivers/scsi/qla2xxx/qla_init.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c
index 0c700b140ce7..88eaf4b66875 100644
--- a/drivers/scsi/qla2xxx/qla_init.c
+++ b/drivers/scsi/qla2xxx/qla_init.c
@@ -602,12 +602,15 @@ static void qla24xx_handle_gnl_done_event(scsi_qla_host_t *vha,
 			break;
 		default:
 			if ((id.b24 != fcport->d_id.b24 &&
-			    fcport->d_id.b24) ||
+			    fcport->d_id.b24 &&
+			    fcport->loop_id != FC_NO_LOOP_ID) ||
 			    (fcport->loop_id != FC_NO_LOOP_ID &&
 				fcport->loop_id != loop_id)) {
 				ql_dbg(ql_dbg_disc, vha, 0x20e3,
 				    "%s %d %8phC post del sess\n",
 				    __func__, __LINE__, fcport->port_name);
+				if (fcport->n2n_flag)
+					fcport->d_id.b24 = 0;
 				qlt_schedule_sess_for_deletion(fcport);
 				return;
 			}
@@ -615,6 +618,8 @@ static void qla24xx_handle_gnl_done_event(scsi_qla_host_t *vha,
 		}
 
 		fcport->loop_id = loop_id;
+		if (fcport->n2n_flag)
+			fcport->d_id.b24 = id.b24;
 
 		wwn = wwn_to_u64(fcport->port_name);
 		qlt_find_sess_invalidate_other(vha, wwn,
-- 
2.12.0




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]

  Powered by Linux