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:
2371c40
)
RDMA/rtrs-srv: Fix memory leak when having multiple sessions
author
Jack Wang
<jinpu.wang@cloud.ionos.com>
Fri, 28 May 2021 11:30:16 +0000
(13:30 +0200)
committer
Jason Gunthorpe
<jgg@nvidia.com>
Fri, 28 May 2021 23:52:58 +0000
(20:52 -0300)
Gioh notice memory leak below
unreferenced object 0xffff8880acda2000 (size 2048):
comm "kworker/4:1", pid 77, jiffies
4295062871
(age 1270.730s)
hex dump (first 32 bytes):
00 20 da ac 80 88 ff ff 00 20 da ac 80 88 ff ff . ....... ......
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
backtrace:
[<
00000000e85d85b5
>] rtrs_srv_rdma_cm_handler+0x8e5/0xa90 [rtrs_server]
[<
00000000e31a988a
>] cma_ib_req_handler+0xdc5/0x2b50 [rdma_cm]
[<
000000000eb02c5b
>] cm_process_work+0x2d/0x100 [ib_cm]
[<
00000000e1650ca9
>] cm_req_handler+0x11bc/0x1c40 [ib_cm]
[<
000000009c28818b
>] cm_work_handler+0xe65/0x3cf2 [ib_cm]
[<
000000002b53eaa1
>] process_one_work+0x4bc/0x980
[<
00000000da3499fb
>] worker_thread+0x78/0x5c0
[<
00000000167127a4
>] kthread+0x191/0x1e0
[<
0000000060802104
>] ret_from_fork+0x3a/0x50
unreferenced object 0xffff88806d595d90 (size 8):
comm "kworker/4:1H", pid 131, jiffies
4295062972
(age 1269.720s)
hex dump (first 8 bytes):
62 6c 61 00 6b 6b 6b a5 bla.kkk.
backtrace:
[<
000000004447d253
>] kstrdup+0x2e/0x60
[<
0000000047259793
>] kobject_set_name_vargs+0x2f/0xb0
[<
00000000c2ee3bc8
>] dev_set_name+0xab/0xe0
[<
000000002b6bdfb1
>] rtrs_srv_create_sess_files+0x260/0x290 [rtrs_server]
[<
0000000075d87bd7
>] rtrs_srv_info_req_done+0x71b/0x960 [rtrs_server]
[<
00000000ccdf1bb5
>] __ib_process_cq+0x94/0x100 [ib_core]
[<
00000000cbcb60cb
>] ib_cq_poll_work+0x32/0xc0 [ib_core]
[<
000000002b53eaa1
>] process_one_work+0x4bc/0x980
[<
00000000da3499fb
>] worker_thread+0x78/0x5c0
[<
00000000167127a4
>] kthread+0x191/0x1e0
[<
0000000060802104
>] ret_from_fork+0x3a/0x50
unreferenced object 0xffff88806d6bb100 (size 256):
comm "kworker/4:1H", pid 131, jiffies
4295062972
(age 1269.720s)
hex dump (first 32 bytes):
00 00 00 00 ad 4e ad de ff ff ff ff 00 00 00 00 .....N..........
ff ff ff ff ff ff ff ff 00 59 4d 86 ff ff ff ff .........YM.....
backtrace:
[<
00000000a18a11e4
>] device_add+0x74d/0xa00
[<
00000000a915b95f
>] rtrs_srv_create_sess_files.cold+0x49/0x1fe [rtrs_server]
[<
0000000075d87bd7
>] rtrs_srv_info_req_done+0x71b/0x960 [rtrs_server]
[<
00000000ccdf1bb5
>] __ib_process_cq+0x94/0x100 [ib_core]
[<
00000000cbcb60cb
>] ib_cq_poll_work+0x32/0xc0 [ib_core]
[<
000000002b53eaa1
>] process_one_work+0x4bc/0x980
[<
00000000da3499fb
>] worker_thread+0x78/0x5c0
[<
00000000167127a4
>] kthread+0x191/0x1e0
[<
0000000060802104
>] ret_from_fork+0x3a/0x50
The problem is we increase device refcount by get_device in process_info_req
for each path, but only does put_deice for last path, which lead to
memory leak.
To fix it, it also calls put_device when dev_ref is not 0.
Fixes:
e2853c49477d1
("RDMA/rtrs-srv-sysfs: fix missing put_device")
Link:
https://lore.kernel.org/r/20210528113018.52290-19-jinpu.wang@ionos.com
Signed-off-by: Gioh Kim <gi-oh.kim@ionos.com>
Signed-off-by: Jack Wang <jinpu.wang@ionos.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
drivers/infiniband/ulp/rtrs/rtrs-srv-sysfs.c
patch
|
blob
|
history
diff --git
a/drivers/infiniband/ulp/rtrs/rtrs-srv-sysfs.c
b/drivers/infiniband/ulp/rtrs/rtrs-srv-sysfs.c
index
a928817
..
20efd44
100644
(file)
--- a/
drivers/infiniband/ulp/rtrs/rtrs-srv-sysfs.c
+++ b/
drivers/infiniband/ulp/rtrs/rtrs-srv-sysfs.c
@@
-208,6
+208,7
@@
rtrs_srv_destroy_once_sysfs_root_folders(struct rtrs_srv_sess *sess)
device_del(&srv->dev);
put_device(&srv->dev);
} else {
+ put_device(&srv->dev);
mutex_unlock(&srv->paths_mutex);
}
}