mm_update_next_owner() checks the children and siblings to avoid the "global" for_each_process() loop. Not sure this makes any sense, but certainly it makes sense to check our sub-threads before anything else. Signed-off-by: Oleg Nesterov <oleg@xxxxxxxxxx> --- kernel/exit.c | 8 +++++++- 1 files changed, 7 insertions(+), 1 deletions(-) diff --git a/kernel/exit.c b/kernel/exit.c index 1d1810d..b1f7135 100644 --- a/kernel/exit.c +++ b/kernel/exit.c @@ -340,6 +340,12 @@ void mm_update_next_owner(struct mm_struct *mm) read_lock(&tasklist_lock); /* + * Search in the sub-threads + */ + if (assign_new_owner(mm, p)) + goto done; + + /* * Search in the children */ list_for_each_entry(g, &p->children, sibling) { @@ -359,7 +365,7 @@ void mm_update_next_owner(struct mm_struct *mm) * Search through everything else, we should not get here often. */ for_each_process(g) { - if (g->flags & PF_KTHREAD) + if (g == p || g->flags & PF_KTHREAD) continue; if (assign_new_owner(mm, g)) goto done; -- 1.5.5.1 -- To unsubscribe from this list: send the line "unsubscribe cgroups" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html