Hmm. Looks like this helper buys nothing but complicates the
reading, move the code into ptrace_detach_task().

Also s/ret/err/ and s/child/tracee/.

---

 kernel/ptrace.c |   57 +++++++++++++++++++++++---------------------------------
 1 file changed, 24 insertions(+), 33 deletions(-)

--- PU/kernel/ptrace.c~76_KILL_DETACH_SIGNAL    2009-10-09 17:14:30.000000000 
+0200
+++ PU/kernel/ptrace.c  2009-10-09 18:51:56.000000000 +0200
@@ -87,46 +87,37 @@ static struct utrace_engine *ptrace_look
                                        &ptrace_utrace_ops, NULL);
 }
 
-static enum utrace_resume_action
-detach_signal(struct task_struct *tracee,
-                               struct ptrace_context *context, int sig)
-{
-       enum utrace_resume_action action = UTRACE_DETACH;
-
-       switch (get_stop_event(context)) {
-       case PTRACE_EVENT_SYSCALL_ENTRY:
-       case PTRACE_EVENT_SYSCALL_EXIT:
-               if (valid_signal(sig))
-                       send_sig_info(sig, SEND_SIG_PRIV, tracee);
-               break;
-
-       case PTRACE_EVENT_SIGNAL:
-               if (valid_signal(sig))
-                       context->signr = sig;
-               context->stop_code = 0;
-               context->resume = UTRACE_DETACH;
-               action = UTRACE_RESUME;
-               break;
-       }
-
-       return action;
-}
-
-static void ptrace_detach_task(struct task_struct *child, int sig)
+static void ptrace_detach_task(struct task_struct *tracee, int sig)
 {
-       struct utrace_engine *engine = ptrace_lookup_engine(child);
+       struct utrace_engine *engine = ptrace_lookup_engine(tracee);
+       struct ptrace_context *context = ptrace_context(engine);
        enum utrace_resume_action action = UTRACE_DETACH;
-       int ret;
+       int err;
 
        if (unlikely(IS_ERR(engine)))
                return;
 
-       if (sig)
-               action = detach_signal(child, ptrace_context(engine), sig);
+       if (sig) {
+               switch (get_stop_event(context)) {
+               case PTRACE_EVENT_SYSCALL_ENTRY:
+               case PTRACE_EVENT_SYSCALL_EXIT:
+                       if (valid_signal(sig))
+                               send_sig_info(sig, SEND_SIG_PRIV, tracee);
+                       break;
 
-       ret = utrace_control(child, engine, action);
-       WARN_ON(ret && ret != -EINPROGRESS &&
-               ret != -ESRCH && ret != -EALREADY);
+               case PTRACE_EVENT_SIGNAL:
+                       if (valid_signal(sig))
+                               context->signr = sig;
+                       context->stop_code = 0;
+                       context->resume = UTRACE_DETACH;
+                       action = UTRACE_RESUME;
+                       break;
+               }
+       }
+
+       err = utrace_control(tracee, engine, action);
+       WARN_ON(err && err != -EINPROGRESS &&
+               err != -ESRCH && err != -EALREADY);
 
        utrace_engine_put(engine);
 }

Reply via email to