Re: [PATCH 2/2] CRED: Fix __task_cred()'s lockdep check and banner comment
From: Eric W. Biederman
Date: Thu Aug 05 2010 - 17:20:51 EST
Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx> writes:
> On Thu, Aug 5, 2010 at 1:13 PM, Eric W. Biederman <ebiederm@xxxxxxxxxxxx> wrote:
>> I think it is totally reasonable to add a per pid lock,
>> that would protect the pid->task[...] hlist. ÂThat would make
>> things clearer and finer grained without a lot of effort. ÂJust
>> a little more struct pid bloat, and a little extra care in fork,
>> when we add to those lists.
> Hmm. Have you taken a look at Nick Piggin's VFS scalability patches?
> They introduce this "RCU-safe hash chain lock", where each hashchain
> has a lock-bit in the low bit. I wonder if that would be the right
> thing to use?
Interesting. I haven't looked but a lock bit in the low bit of the
hlist head in struct pid would not add any space, and would not add
any extra cache line bounces. So that would just be a matter of
adding the extra locks and getting the lock ordering correct.
>> Even with the per-pgrp lock we still need a lock on the global process
>> list for the kill -KILL -1 case. ÂWhich suggests that tasklist_lock is
>> still needed for part of kill_something_info.
> Well, that -1 case is special anyway. The fact that we might want to
> use the tasklist_lock there is not very relevant, I think. That is
> _not_ a hotpath, really (at least not under any relevant loads, I'm
> sure you could make a silly benchmark of "kill(-1,0)").
I expect even signal deliver to process groups is relatively rare.
The interesting question is can we kill the tasklist_lock and/or the
tasklist. A quick grep shows that we have maybe 100 users of the tasklist
in the entire kernel. Poking a little deeper it looks like man of those
are connected to scheduling and are uses that today take the tasklist_lock
but would be fine with the rcu_read_lock().
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/