From: Oleg Nesterov Just a trivial example, more to come. k_getrusage() holds rcu_read_lock() because it was previously required by lock_task_sighand(). Unneeded now. Signed-off-by: Oleg Nesterov Cc: "Eric W. Biederman" Cc: "Paul E. McKenney" Cc: Roland McGrath Signed-off-by: Andrew Morton --- kernel/sys.c | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff -puN kernel/sys.c~k_getrusage-dont-take-rcu_read_lock kernel/sys.c --- a/kernel/sys.c~k_getrusage-dont-take-rcu_read_lock +++ a/kernel/sys.c @@ -1566,11 +1566,8 @@ static void k_getrusage(struct task_stru goto out; } - rcu_read_lock(); - if (!lock_task_sighand(p, &flags)) { - rcu_read_unlock(); + if (!lock_task_sighand(p, &flags)) return; - } switch (who) { case RUSAGE_BOTH: @@ -1606,9 +1603,7 @@ static void k_getrusage(struct task_stru default: BUG(); } - unlock_task_sighand(p, &flags); - rcu_read_unlock(); out: cputime_to_timeval(utime, &r->ru_utime); _