mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-31 12:10:52 -04:00
vm_is_stack: use for_each_thread() rather then buggy while_each_thread()
Aleksei hit the soft lockup during reading /proc/PID/smaps. David investigated the problem and suggested the right fix. while_each_thread() is racy and should die, this patch updates vm_is_stack(). Signed-off-by: Oleg Nesterov <[email protected]> Reported-by: Aleksei Besogonov <[email protected]> Tested-by: Aleksei Besogonov <[email protected]> Suggested-by: David Rientjes <[email protected]> Cc: <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
This commit is contained in:
parent
edcad25095
commit
4449a51a7c
1 changed files with 3 additions and 6 deletions
|
|
@ -183,17 +183,14 @@ pid_t vm_is_stack(struct task_struct *task,
|
|||
|
||||
if (in_group) {
|
||||
struct task_struct *t;
|
||||
rcu_read_lock();
|
||||
if (!pid_alive(task))
|
||||
goto done;
|
||||
|
||||
t = task;
|
||||
do {
|
||||
rcu_read_lock();
|
||||
for_each_thread(task, t) {
|
||||
if (vm_is_stack_for_task(t, vma)) {
|
||||
ret = t->pid;
|
||||
goto done;
|
||||
}
|
||||
} while_each_thread(task, t);
|
||||
}
|
||||
done:
|
||||
rcu_read_unlock();
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue