exit: reparent: document the ->has_child_subreaper checks
Swap the "init_task" and same_thread_group() checks. This way it is more simple to document these checks and we can remove the link to the previous discussion on lkml. Signed-off-by: Oleg Nesterov <oleg@redhat.com> Cc: Aaron Tomlin <atomlin@redhat.com> Cc: "Eric W. Biederman" <ebiederm@xmission.com> Cc: Kay Sievers <kay@vrfy.org> Cc: Lennart Poettering <lennart@poettering.net> Cc: Sterling Alexander <stalexan@redhat.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
3750ef979c
commit
175aed3f8d
|
@ -495,18 +495,16 @@ static struct task_struct *find_new_reaper(struct task_struct *father)
|
|||
|
||||
if (father->signal->has_child_subreaper) {
|
||||
struct task_struct *reaper;
|
||||
|
||||
/*
|
||||
* Find the first ancestor marked as child_subreaper.
|
||||
* Note that the code below checks same_thread_group(reaper,
|
||||
* pid_ns->child_reaper). This is what we need to DTRT in a
|
||||
* PID namespace. However we still need the check above, see
|
||||
* http://marc.info/?l=linux-kernel&m=131385460420380
|
||||
* Find the first ->is_child_subreaper ancestor in our pid_ns.
|
||||
* We start from father to ensure we can not look into another
|
||||
* namespace, this is safe because all its threads are dead.
|
||||
*/
|
||||
for (reaper = father;
|
||||
reaper != &init_task;
|
||||
!same_thread_group(reaper, pid_ns->child_reaper);
|
||||
reaper = reaper->real_parent) {
|
||||
if (same_thread_group(reaper, pid_ns->child_reaper))
|
||||
/* call_usermodehelper() descendants need this check */
|
||||
if (reaper == &init_task)
|
||||
break;
|
||||
if (!reaper->signal->is_child_subreaper)
|
||||
continue;
|
||||
|
|
Loading…
Reference in New Issue