lkml.org 
[lkml]   [2011]   [Mar]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 11/20] ptrace: Collapse ptrace_untrace() into __ptrace_unlink()
    Date
    Remove the extra task_is_traced() check in __ptrace_unlink() and
    collapse ptrace_untrace() into __ptrace_unlink(). This is to prepare
    for further changes.

    While at it, drop the comment on top of ptrace_untrace() and convert
    __ptrace_unlink() comment to docbook format. Detailed comment will be
    added by the next patch.

    This patch doesn't cause any visible behavior changes.

    Signed-off-by: Tejun Heo <tj@kernel.org>
    Acked-by: Oleg Nesterov <oleg@redhat.com>
    ---
    kernel/ptrace.c | 40 +++++++++++++++-------------------------
    1 files changed, 15 insertions(+), 25 deletions(-)

    diff --git a/kernel/ptrace.c b/kernel/ptrace.c
    index 745fc2d..e609843 100644
    --- a/kernel/ptrace.c
    +++ b/kernel/ptrace.c
    @@ -37,15 +37,23 @@ void __ptrace_link(struct task_struct *child, struct task_struct *new_parent)
    child->parent = new_parent;
    }

    -/*
    - * Turn a tracing stop into a normal stop now, since with no tracer there
    - * would be no way to wake it up with SIGCONT or SIGKILL. If there was a
    - * signal sent that would resume the child, but didn't because it was in
    - * TASK_TRACED, resume it now.
    - * Requires that irqs be disabled.
    +/**
    + * __ptrace_unlink - unlink ptracee and restore its execution state
    + * @child: ptracee to be unlinked
    + *
    + * Remove @child from the ptrace list, move it back to the original parent.
    + *
    + * CONTEXT:
    + * write_lock_irq(tasklist_lock)
    */
    -static void ptrace_untrace(struct task_struct *child)
    +void __ptrace_unlink(struct task_struct *child)
    {
    + BUG_ON(!child->ptrace);
    +
    + child->ptrace = 0;
    + child->parent = child->real_parent;
    + list_del_init(&child->ptrace_entry);
    +
    spin_lock(&child->sighand->siglock);
    if (task_is_traced(child)) {
    /*
    @@ -70,24 +78,6 @@ static void ptrace_untrace(struct task_struct *child)
    }

    /*
    - * unptrace a task: move it back to its original parent and
    - * remove it from the ptrace list.
    - *
    - * Must be called with the tasklist lock write-held.
    - */
    -void __ptrace_unlink(struct task_struct *child)
    -{
    - BUG_ON(!child->ptrace);
    -
    - child->ptrace = 0;
    - child->parent = child->real_parent;
    - list_del_init(&child->ptrace_entry);
    -
    - if (task_is_traced(child))
    - ptrace_untrace(child);
    -}
    -
    -/*
    * Check that we have indeed attached to the thing..
    */
    int ptrace_check_attach(struct task_struct *child, int kill)
    --
    1.7.1


    \
     
     \ /
      Last update: 2011-03-23 11:11    [W:5.896 / U:0.120 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site