projects
/
openwrt
/
staging
/
blogic.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
8a713e7
)
proc: use down_read_killable mmap_sem for /proc/pid/smaps_rollup
author
Konstantin Khlebnikov
<
[email protected]
>
Fri, 12 Jul 2019 03:59:53 +0000
(20:59 -0700)
committer
Linus Torvalds
<
[email protected]
>
Fri, 12 Jul 2019 18:05:47 +0000
(11:05 -0700)
Do not remain stuck forever if something goes wrong. Using a killable
lock permits cleanup of stuck tasks and simplifies investigation.
Link:
http://lkml.kernel.org/r/156007493429.3335.14666825072272692455.stgit@buzz
Signed-off-by: Konstantin Khlebnikov <
[email protected]
>
Reviewed-by: Roman Gushchin <
[email protected]
>
Reviewed-by: Cyrill Gorcunov <
[email protected]
>
Reviewed-by: Kirill Tkhai <
[email protected]
>
Acked-by: Michal Hocko <
[email protected]
>
Cc: Alexey Dobriyan <
[email protected]
>
Cc: Al Viro <
[email protected]
>
Cc: Matthew Wilcox <
[email protected]
>
Cc: Michal Koutný <
[email protected]
>
Cc: Oleg Nesterov <
[email protected]
>
Signed-off-by: Andrew Morton <
[email protected]
>
Signed-off-by: Linus Torvalds <
[email protected]
>
fs/proc/task_mmu.c
patch
|
blob
|
history
diff --git
a/fs/proc/task_mmu.c
b/fs/proc/task_mmu.c
index 2bf210229dafbcc09b70a2c135335f639602ec09..781879a91e3bd1f5d688f59cf4baa78deddf68b2 100644
(file)
--- a/
fs/proc/task_mmu.c
+++ b/
fs/proc/task_mmu.c
@@
-832,7
+832,10
@@
static int show_smaps_rollup(struct seq_file *m, void *v)
memset(&mss, 0, sizeof(mss));
- down_read(&mm->mmap_sem);
+ ret = down_read_killable(&mm->mmap_sem);
+ if (ret)
+ goto out_put_mm;
+
hold_task_mempolicy(priv);
for (vma = priv->mm->mmap; vma; vma = vma->vm_next) {
@@
-849,8
+852,9
@@
static int show_smaps_rollup(struct seq_file *m, void *v)
release_task_mempolicy(priv);
up_read(&mm->mmap_sem);
- mmput(mm);
+out_put_mm:
+ mmput(mm);
out_put_task:
put_task_struct(priv->task);
priv->task = NULL;