kill my_ptrace_child()
PATCH 2/2 kill my_ptrace_child()
Now that my_ptrace_child() is trivial we can use the "p->ptrace & PT_PTRACED" inline and simplify the corresponding logic in do_wait: we can't find the child in TASK_TRACED state without PT_PTRACED flag set, ptrace_untrace() either sets TASK_STOPPED or wakes up the tracee.
Signed-off-by Oleg Nesterov <[email protected]>
kernel/exit.c renamed from kernel/exit.c~2_my_ptrace_child +3 -20
@@ -1510,12 +1510,6 @@ static int wait_task_continued(struct tareturn retval; } - -static inline int my_ptrace_child (struct task_struct *p) -{ -return p->ptrace &PT_PTRACED ; -} -static long do_wait (pid_t pid,int options,struct siginfo __user *infop,int __user *stat_addr,struct rusage __user *ru) {
@@ -1554,22 +1548,11 @@ repeat:/* * It's stopped now, so it might later * continue, exit, or stop again. -* -* When we hit the race with PTRACE_ATTACH, we -* will not report this child. But the race -* means it has not yet been moved to our -* ptrace_children list, so we need to set the -* flag here to avoid a spurious ECHILD when -* the race happens with the only child. */ flag =1 ; - -if (!my_ptrace_child (p)) { -if (is_task_traced (p)) -continue ; -if (!(options &WUNTRACED )) -continue ; - } +if (!(p->ptrace &PT_PTRACED ) && + !(options &WUNTRACED )) +continue ; retval = wait_task_stopped(p, ret == 2, (options & WNOWAIT), infop,
This looks ok to me.
Thanks,
Roland