lkml.org 
[lkml]   [2011]   [Jun]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH] Introduce ActivePid: in /proc/self/status (v2, was Vpid:)
    On 06/16, Greg Kurz wrote:
    >
    > On Wed, 2011-06-15 at 20:46 +0200, Oleg Nesterov wrote:
    > > On 06/15, Greg Kurz wrote:
    > > >
    > > > @@ -176,6 +177,17 @@ static inline void task_state(struct seq_file *m, struct pid_namespace *ns,
    > > > if (tracer)
    > > > tpid = task_pid_nr_ns(tracer, ns);
    > > > }
    > > > + actpid = 0;
    > > > + sighand = rcu_dereference(p->sighand);
    > > > + if (sighand) {
    > > > + struct pid_namespace *pid_ns;
    > > > + unsigned long flags;
    > > > + spin_lock_irqsave(&sighand->siglock, flags);
    > >
    > > Well. This is not exactly right. We have lock_task_sighand() for this.
    > >
    >
    > I see... ->sighand could change so we need the for(;;) loop in
    > __lock_task_sighand() to be sure we have the right pointer, correct ?

    Yes,

    > By the way, if we use lock_task_sighand() we'll end up with nested
    > rcu_read_lock(): it will work but I don't know how it may affect
    > performance...

    You are kidding ;)

    > > But. Why do you need ->siglock? Why rcu_read_lock() is not enough?
    > >
    >
    > Because there's a race with
    > __exit_signal()->__unhash_process()->detach_pid() that can break
    > task_active_pid_ns()

    Yes,

    > and rcu won't help here

    Why? free_pid() uses call_rcu() to do put_pid()

    > (unless *perhaps* by
    > modifying __exit_signal() but I don't want to mess with such a critical
    > path).

    I don't think so...

    > > Hmm. You don't even need pid_ns afaics, you could simply look at
    > > pid->numbers[pid->level].
    > >
    >
    > True but I will have the same problem: detach_pid() nullifies the pid.

    Can't understand. Of course pid can be NULL. So what? Say, ->sighand
    can be NULL as well, they both "disappear" at the same time. This is
    fine, we raced with exit, we should report pid=0.

    Oleg.



    \
     
     \ /
      Last update: 2011-06-16 14:47    [W:0.022 / U:88.832 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site