diff --git a/mm/oom_kill.c b/mm/oom_kill.c index 21f0a7e8e51491939b6f52c2bc227307790cf9a0..423dcae323a54cee90817df40cf4fdcf26b1b1dd 100644 --- a/mm/oom_kill.c +++ b/mm/oom_kill.c @@ -206,11 +206,14 @@ static struct task_struct *select_bad_process(unsigned long *ppoints) unsigned long points; int releasing; - /* skip kernel threads */ + /* + * skip kernel threads and tasks which have already released + * their mm. + */ if (!p->mm) continue; - /* skip the init task with pid == 1 */ - if (p->pid == 1) + /* skip the init task */ + if (is_init(p)) continue; /* @@ -226,9 +229,6 @@ static struct task_struct *select_bad_process(unsigned long *ppoints) releasing = test_tsk_thread_flag(p, TIF_MEMDIE) || p->flags & PF_EXITING; if (releasing) { - /* TASK_DEAD tasks have already released their mm */ - if (p->state == TASK_DEAD) - continue; if (p->flags & PF_EXITING && p == current) { chosen = p; *ppoints = ULONG_MAX;