projects
/
platform
/
kernel
/
linux-rpi.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
92bbccd
)
scsi: qedf: Set the UNLOADING flag when removing a vport
author
Chad Dupuis
<chad.dupuis@cavium.com>
Wed, 25 Apr 2018 13:09:02 +0000
(06:09 -0700)
committer
Martin K. Petersen
<martin.petersen@oracle.com>
Tue, 8 May 2018 04:57:11 +0000
(
00:57
-0400)
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 <chad.dupuis@cavium.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/qedf/qedf_main.c
patch
|
blob
|
history
diff --git
a/drivers/scsi/qedf/qedf_main.c
b/drivers/scsi/qedf/qedf_main.c
index
23849f5
..
5f9ae6e
100644
(file)
--- a/
drivers/scsi/qedf/qedf_main.c
+++ b/
drivers/scsi/qedf/qedf_main.c
@@
-1677,6
+1677,15
@@
static int qedf_vport_destroy(struct fc_vport *vport)
struct Scsi_Host *shost = vport_to_shost(vport);
struct fc_lport *n_port = shost_priv(shost);
struct fc_lport *vn_port = vport->dd_data;
+ struct qedf_ctx *qedf = lport_priv(vn_port);
+
+ if (!qedf) {
+ QEDF_ERR(NULL, "qedf is NULL.\n");
+ goto out;
+ }
+
+ /* Set unloading bit on vport qedf_ctx to prevent more I/O */
+ set_bit(QEDF_UNLOADING, &qedf->flags);
mutex_lock(&n_port->lp_mutex);
list_del(&vn_port->list);
@@
-1703,6
+1712,7
@@
static int qedf_vport_destroy(struct fc_vport *vport)
if (vn_port->host)
scsi_host_put(vn_port->host);
+out:
return 0;
}