diff options
author | Oleg Nesterov <oleg@redhat.com> | 2014-04-07 18:38:45 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2014-04-07 19:36:06 -0400 |
commit | b3ab03160dfaf8ab78d476b670de319f4c1a5685 (patch) | |
tree | 1ba7dbadf646e9d5c9939625a001e257ac91a12c /kernel | |
parent | b436069059fede30ca31d4bf439cc86436ff5b1d (diff) |
wait: completely ignore the EXIT_DEAD tasks
Now that EXIT_DEAD is the terminal state it doesn't make sense to call
eligible_child() or security_task_wait() if the task is really dead.
Signed-off-by: Oleg Nesterov <oleg@redhat.com>
Tested-by: Michal Schmidt <mschmidt@redhat.com>
Cc: Jan Kratochvil <jan.kratochvil@redhat.com>
Cc: Al Viro <viro@ZenIV.linux.org.uk>
Cc: Lennart Poettering <lpoetter@redhat.com>
Cc: Roland McGrath <roland@hack.frob.com>
Cc: Tejun Heo <tj@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/exit.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/kernel/exit.c b/kernel/exit.c index 4773ed990907..33cf8dba0a61 100644 --- a/kernel/exit.c +++ b/kernel/exit.c | |||
@@ -1329,7 +1329,12 @@ static int wait_task_continued(struct wait_opts *wo, struct task_struct *p) | |||
1329 | static int wait_consider_task(struct wait_opts *wo, int ptrace, | 1329 | static int wait_consider_task(struct wait_opts *wo, int ptrace, |
1330 | struct task_struct *p) | 1330 | struct task_struct *p) |
1331 | { | 1331 | { |
1332 | int ret = eligible_child(wo, p); | 1332 | int ret; |
1333 | |||
1334 | if (unlikely(p->exit_state == EXIT_DEAD)) | ||
1335 | return 0; | ||
1336 | |||
1337 | ret = eligible_child(wo, p); | ||
1333 | if (!ret) | 1338 | if (!ret) |
1334 | return ret; | 1339 | return ret; |
1335 | 1340 | ||
@@ -1347,10 +1352,6 @@ static int wait_consider_task(struct wait_opts *wo, int ptrace, | |||
1347 | return 0; | 1352 | return 0; |
1348 | } | 1353 | } |
1349 | 1354 | ||
1350 | /* dead body doesn't have much to contribute */ | ||
1351 | if (unlikely(p->exit_state == EXIT_DEAD)) | ||
1352 | return 0; | ||
1353 | |||
1354 | if (unlikely(p->exit_state == EXIT_TRACE)) { | 1355 | if (unlikely(p->exit_state == EXIT_TRACE)) { |
1355 | /* | 1356 | /* |
1356 | * ptrace == 0 means we are the natural parent. In this case | 1357 | * ptrace == 0 means we are the natural parent. In this case |