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, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>