diff options
author | Oleg Nesterov <oleg@redhat.com> | 2014-06-04 19:07:52 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2014-06-04 19:54:03 -0400 |
commit | f87fb599ae4d2a152a93f9821b94f3158146d097 (patch) | |
tree | 8b64fc4a17246ab6988d7f09c18ee4f0af6b51e4 /kernel/exit.c | |
parent | f7e2f7e896d8b74e92b687f7333721fd7be0f4b5 (diff) |
memcg: mm_update_next_owner() should skip kthreads
"Search through everything else" in mm_update_next_owner() can hit a
kthread which adopted this "mm" via use_mm(), it should not be used as
mm->owner. Add the PF_KTHREAD check.
While at it, change this code to use for_each_process_thread() instead
of deprecated do_each_thread/while_each_thread.
Signed-off-by: Oleg Nesterov <oleg@redhat.com>
Reviewed-by: Michal Hocko <mhocko@suse.cz>
Cc: Balbir Singh <bsingharora@gmail.com>
Cc: Johannes Weiner <hannes@cmpxchg.org>
Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Cc: Michal Hocko <mhocko@suse.cz>
Cc: Peter Chiang <pchiang@nvidia.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'kernel/exit.c')
-rw-r--r-- | kernel/exit.c | 10 |
1 files changed, 4 insertions, 6 deletions
diff --git a/kernel/exit.c b/kernel/exit.c index da1b838de8a6..5ac3c19c245c 100644 --- a/kernel/exit.c +++ b/kernel/exit.c | |||
@@ -395,14 +395,12 @@ retry: | |||
395 | } | 395 | } |
396 | 396 | ||
397 | /* | 397 | /* |
398 | * Search through everything else. We should not get | 398 | * Search through everything else, we should not get here often. |
399 | * here often | ||
400 | */ | 399 | */ |
401 | do_each_thread(g, c) { | 400 | for_each_process_thread(g, c) { |
402 | if (c->mm == mm) | 401 | if (!(c->flags & PF_KTHREAD) && c->mm == mm) |
403 | goto assign_new_owner; | 402 | goto assign_new_owner; |
404 | } while_each_thread(g, c); | 403 | } |
405 | |||
406 | read_unlock(&tasklist_lock); | 404 | read_unlock(&tasklist_lock); |
407 | /* | 405 | /* |
408 | * We found no owner yet mm_users > 1: this implies that we are | 406 | * We found no owner yet mm_users > 1: this implies that we are |