Skip to content

Commit 4f4616c

Browse files
Chad Dupuismartinkpetersen
Chad Dupuis
authored andcommitted
scsi: qedf: Set the UNLOADING flag when removing a vport
Similar to what we do when we remove a PCI function, set the QEDF_UNLOADING flag to prevent any requests from being queued while a vport is being deleted. This prevents any requests from getting stuck in limbo when the vport is unloaded or deleted. Fixes the crash: PID: 106676 TASK: ffff9a436aa90000 CPU: 12 COMMAND: "multipathd" #0 [ffff9a43567d3550] machine_kexec+522 at ffffffffaca60b2a #1 [ffff9a43567d35b0] __crash_kexec+114 at ffffffffacb13512 #2 [ffff9a43567d3680] crash_kexec+48 at ffffffffacb13600 #3 [ffff9a43567d3698] oops_end+168 at ffffffffad117768 #4 [ffff9a43567d36c0] no_context+645 at ffffffffad106f52 #5 [ffff9a43567d3710] __bad_area_nosemaphore+116 at ffffffffad106fe9 #6 [ffff9a43567d3760] bad_area+70 at ffffffffad107379 #7 [ffff9a43567d3788] __do_page_fault+1247 at ffffffffad11a8cf #8 [ffff9a43567d37f0] do_page_fault+53 at ffffffffad11a915 #9 [ffff9a43567d3820] page_fault+40 at ffffffffad116768 [exception RIP: qedf_init_task+61] RIP: ffffffffc0e13c2d RSP: ffff9a43567d38d0 RFLAGS: 00010046 RAX: 0000000000000000 RBX: ffffbe920472c738 RCX: ffff9a434fa0e3e8 RDX: ffff9a434f695280 RSI: ffffbe920472c738 RDI: ffff9a43aa359c80 RBP: ffff9a43567d3950 R8: 0000000000000c15 R9: ffff9a3fb09b9880 R10: ffff9a434fa0e3e8 R11: ffff9a43567d35ce R12: 0000000000000000 R13: ffff9a434f695280 R14: ffff9a43aa359c80 R15: ffff9a3fb9e005c0 ORIG_RAX: ffffffffffffffff CS: 0010 SS: 0018 Signed-off-by: Chad Dupuis <[email protected]> Signed-off-by: Martin K. Petersen <[email protected]>
1 parent 92bbccd commit 4f4616c

File tree

1 file changed

+10
-0
lines changed

1 file changed

+10
-0
lines changed

drivers/scsi/qedf/qedf_main.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1677,6 +1677,15 @@ static int qedf_vport_destroy(struct fc_vport *vport)
16771677
struct Scsi_Host *shost = vport_to_shost(vport);
16781678
struct fc_lport *n_port = shost_priv(shost);
16791679
struct fc_lport *vn_port = vport->dd_data;
1680+
struct qedf_ctx *qedf = lport_priv(vn_port);
1681+
1682+
if (!qedf) {
1683+
QEDF_ERR(NULL, "qedf is NULL.\n");
1684+
goto out;
1685+
}
1686+
1687+
/* Set unloading bit on vport qedf_ctx to prevent more I/O */
1688+
set_bit(QEDF_UNLOADING, &qedf->flags);
16801689

16811690
mutex_lock(&n_port->lp_mutex);
16821691
list_del(&vn_port->list);
@@ -1703,6 +1712,7 @@ static int qedf_vport_destroy(struct fc_vport *vport)
17031712
if (vn_port->host)
17041713
scsi_host_put(vn_port->host);
17051714

1715+
out:
17061716
return 0;
17071717
}
17081718

0 commit comments

Comments
 (0)