diff options
author | Oleg Nesterov <oleg@tv-sign.ru> | 2008-04-30 03:52:38 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-04-30 11:29:34 -0400 |
commit | 06fffb1267c9d986687b69d74a46ee332a50575e (patch) | |
tree | bfbef85a5fa65550f40d83e75d8e23cea5238772 /fs/proc | |
parent | d6cf723a142f63ccb92272bc0e9bfffd3c3a5cac (diff) |
do_task_stat: don't take rcu_read_lock()
lock_task_sighand() was changed, and do_task_stat() doesn't need
rcu_read_lock any longer. sighand->siglock protects all "interesting"
fields.
Except: it doesn't protect ->tty->pgrp, but neither does rcu_read_lock(), this
should be fixed.
Signed-off-by: Oleg Nesterov <oleg@tv-sign.ru>
Cc: "Eric W. Biederman" <ebiederm@xmission.com>
Cc: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
Cc: Roland McGrath <roland@redhat.com>
Cc: Alan Cox <alan@lxorguk.ukuu.org.uk>
Cc: Pavel Emelyanov <xemul@sw.ru>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'fs/proc')
-rw-r--r-- | fs/proc/array.c | 2 |
1 files changed, 0 insertions, 2 deletions
diff --git a/fs/proc/array.c b/fs/proc/array.c index 07d6c4853fe8..b07a71002f2f 100644 --- a/fs/proc/array.c +++ b/fs/proc/array.c | |||
@@ -425,7 +425,6 @@ static int do_task_stat(struct seq_file *m, struct pid_namespace *ns, | |||
425 | cutime = cstime = utime = stime = cputime_zero; | 425 | cutime = cstime = utime = stime = cputime_zero; |
426 | cgtime = gtime = cputime_zero; | 426 | cgtime = gtime = cputime_zero; |
427 | 427 | ||
428 | rcu_read_lock(); | ||
429 | if (lock_task_sighand(task, &flags)) { | 428 | if (lock_task_sighand(task, &flags)) { |
430 | struct signal_struct *sig = task->signal; | 429 | struct signal_struct *sig = task->signal; |
431 | 430 | ||
@@ -469,7 +468,6 @@ static int do_task_stat(struct seq_file *m, struct pid_namespace *ns, | |||
469 | 468 | ||
470 | unlock_task_sighand(task, &flags); | 469 | unlock_task_sighand(task, &flags); |
471 | } | 470 | } |
472 | rcu_read_unlock(); | ||
473 | 471 | ||
474 | if (!whole || num_threads < 2) | 472 | if (!whole || num_threads < 2) |
475 | wchan = get_wchan(task); | 473 | wchan = get_wchan(task); |