On 03/31, Oleg Nesterov wrote: > > OK, but I guess this !p->mm check is still wrong for the same reason. > In fact I do not understand why it is needed in select_bad_process() > right before oom_badness() which checks ->mm too (and this check is > equally wrong). Probably something like the patch below makes sense. Note that "skip kernel threads" logic is wrong too, we should check PF_KTHREAD. Probably it is better to check it in select_bad_process() instead, near is_global_init(). The new helper, find_lock_task_mm(), should be used by oom_forkbomb_penalty() too. dump_tasks() doesn't need it, it does do_each_thread(). Cough, __out_of_memory() and out_of_memory() call it without tasklist. We are going to panic() anyway, but still. Oleg. --- x/mm/oom_kill.c +++ x/mm/oom_kill.c @@ -129,6 +129,19 @@ static unsigned long oom_forkbomb_penalt (child_rss / sysctl_oom_forkbomb_thres) : 0; } +static find_lock_task_mm(struct task_struct *p) +{ + struct task_struct *t = p; + do { + task_lock(t); + if (likely(t->mm && !(t->flags & PF_KTHREAD))) + return t; + task_unlock(t); + } while_each_thred(p, t); + + return NULL; +} + /** * oom_badness - heuristic function to determine which candidate task to kill * @p: task struct of which task we should calculate @@ -159,13 +172,9 @@ unsigned int oom_badness(struct task_str if (p->flags & PF_OOM_ORIGIN) return 1000; - task_lock(p); - mm = p->mm; - if (!mm) { - task_unlock(p); + p = find_lock_task_mm(p); + if (!p) return 0; - } - /* * The baseline for the badness score is the proportion of RAM that each * task's rss and swap space use. @@ -330,12 +339,6 @@ static struct task_struct *select_bad_pr *ppoints = 1000; } - /* - * skip kernel threads and tasks which have already released - * their mm. - */ - if (!p->mm) - continue; if (p->signal->oom_score_adj == OOM_SCORE_ADJ_MIN) continue; -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxxx For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>