From: Oleg Nesterov 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 Cc: "Eric W. Biederman" Cc: "Paul E. McKenney" Cc: Roland McGrath Cc: Alan Cox Cc: Pavel Emelyanov Signed-off-by: Andrew Morton --- fs/proc/array.c | 2 -- 1 file changed, 2 deletions(-) diff -puN fs/proc/array.c~do_task_stat-dont-take-rcu_read_lock fs/proc/array.c --- a/fs/proc/array.c~do_task_stat-dont-take-rcu_read_lock +++ a/fs/proc/array.c @@ -425,7 +425,6 @@ static int do_task_stat(struct seq_file cutime = cstime = utime = stime = cputime_zero; cgtime = gtime = cputime_zero; - rcu_read_lock(); if (lock_task_sighand(task, &flags)) { struct signal_struct *sig = task->signal; @@ -469,7 +468,6 @@ static int do_task_stat(struct seq_file unlock_task_sighand(task, &flags); } - rcu_read_unlock(); if (!whole || num_threads < 2) wchan = get_wchan(task); _