projects
/
linux.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
be66572
)
block/rnbd-clt: avoid module unload race with close confirmation
author
Jack Wang
<jinpu.wang@cloud.ionos.com>
Fri, 8 Jan 2021 14:36:34 +0000
(15:36 +0100)
committer
Greg Kroah-Hartman
<gregkh@linuxfoundation.org>
Sun, 17 Jan 2021 13:17:05 +0000
(14:17 +0100)
commit
3a21777c6ee99749bac10727b3c17e5bcfebe5c1
upstream.
We had kernel panic, it is caused by unload module and last
close confirmation.
call trace:
[
1196029
.743127] free_sess+0x15/0x50 [rtrs_client]
[
1196029
.743128] rtrs_clt_close+0x4c/0x70 [rtrs_client]
[
1196029
.743129] ? rnbd_clt_unmap_device+0x1b0/0x1b0 [rnbd_client]
[
1196029
.743130] close_rtrs+0x25/0x50 [rnbd_client]
[
1196029
.743131] rnbd_client_exit+0x93/0xb99 [rnbd_client]
[
1196029
.743132] __x64_sys_delete_module+0x190/0x260
And in the crashdump confirmation kworker is also running.
PID: 6943 TASK:
ffff9e2ac8098000
CPU: 4 COMMAND: "kworker/4:2"
#0 [
ffffb206cf337c30
] __schedule at
ffffffff9f93f891
#1 [
ffffb206cf337cc8
] schedule at
ffffffff9f93fe98
#2 [
ffffb206cf337cd0
] schedule_timeout at
ffffffff9f943938
#3 [
ffffb206cf337d50
] wait_for_completion at
ffffffff9f9410a7
#4 [
ffffb206cf337da0
] __flush_work at
ffffffff9f08ce0e
#5 [
ffffb206cf337e20
] rtrs_clt_close_conns at
ffffffffc0d5f668
[rtrs_client]
#6 [
ffffb206cf337e48
] rtrs_clt_close at
ffffffffc0d5f801
[rtrs_client]
#7 [
ffffb206cf337e68
] close_rtrs at
ffffffffc0d26255
[rnbd_client]
#8 [
ffffb206cf337e78
] free_sess at
ffffffffc0d262ad
[rnbd_client]
#9 [
ffffb206cf337e88
] rnbd_clt_put_dev at
ffffffffc0d266a7
[rnbd_client]
The problem is both code path try to close same session, which lead to
panic.
To fix it, just skip the sess if the refcount already drop to 0.
Fixes:
f7a7a5c228d4
("block/rnbd: client: main functionality")
Signed-off-by: Jack Wang <jinpu.wang@cloud.ionos.com>
Reviewed-by: Gioh Kim <gi-oh.kim@cloud.ionos.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/block/rnbd/rnbd-clt.c
patch
|
blob
|
history
diff --git
a/drivers/block/rnbd/rnbd-clt.c
b/drivers/block/rnbd/rnbd-clt.c
index
7af1b60
..
ba334fe
100644
(file)
--- a/
drivers/block/rnbd/rnbd-clt.c
+++ b/
drivers/block/rnbd/rnbd-clt.c
@@
-1671,7
+1671,8
@@
static void rnbd_destroy_sessions(void)
*/
list_for_each_entry_safe(sess, sn, &sess_list, list) {
- WARN_ON(!rnbd_clt_get_sess(sess));
+ if (!rnbd_clt_get_sess(sess))
+ continue;
close_rtrs(sess);
list_for_each_entry_safe(dev, tn, &sess->devs_list, list) {
/*