diff options
-rw-r--r-- | mm/oom_kill.c | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/mm/oom_kill.c b/mm/oom_kill.c index 21f0a7e8e514..423dcae323a5 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) | |||
206 | unsigned long points; | 206 | unsigned long points; |
207 | int releasing; | 207 | int releasing; |
208 | 208 | ||
209 | /* skip kernel threads */ | 209 | /* |
210 | * skip kernel threads and tasks which have already released | ||
211 | * their mm. | ||
212 | */ | ||
210 | if (!p->mm) | 213 | if (!p->mm) |
211 | continue; | 214 | continue; |
212 | /* skip the init task with pid == 1 */ | 215 | /* skip the init task */ |
213 | if (p->pid == 1) | 216 | if (is_init(p)) |
214 | continue; | 217 | continue; |
215 | 218 | ||
216 | /* | 219 | /* |
@@ -226,9 +229,6 @@ static struct task_struct *select_bad_process(unsigned long *ppoints) | |||
226 | releasing = test_tsk_thread_flag(p, TIF_MEMDIE) || | 229 | releasing = test_tsk_thread_flag(p, TIF_MEMDIE) || |
227 | p->flags & PF_EXITING; | 230 | p->flags & PF_EXITING; |
228 | if (releasing) { | 231 | if (releasing) { |
229 | /* TASK_DEAD tasks have already released their mm */ | ||
230 | if (p->state == TASK_DEAD) | ||
231 | continue; | ||
232 | if (p->flags & PF_EXITING && p == current) { | 232 | if (p->flags & PF_EXITING && p == current) { |
233 | chosen = p; | 233 | chosen = p; |
234 | *ppoints = ULONG_MAX; | 234 | *ppoints = ULONG_MAX; |