Messages in this thread Patch in this message | | | Date | Fri, 18 Apr 2014 19:26:53 +0200 | From | Oleg Nesterov <> | Subject | [PATCH 1/2] 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> --- kernel/exit.c | 10 ++++------ 1 files changed, 4 insertions(+), 6 deletions(-)
diff --git a/kernel/exit.c b/kernel/exit.c index ad7183a..e270d2a 100644 --- a/kernel/exit.c +++ b/kernel/exit.c @@ -356,14 +356,12 @@ retry: } /* - * Search through everything else. We should not get - * here often + * Search through everything else, we should not get here often. */ - do_each_thread(g, c) { - if (c->mm == mm) + for_each_process_thread(g, c) { + if (!(c->flags & PF_KTHREAD) && c->mm == mm) goto assign_new_owner; - } while_each_thread(g, c); - + } read_unlock(&tasklist_lock); /* * We found no owner yet mm_users > 1: this implies that we are -- 1.5.5.1
| |