proc: don't do dummy rcu_read_lock/rcu_read_unlock on error path
PATCH 1/2 proc: don't do dummy rcu_read_lock/rcu_read_unlock on error path
rcu_read_lock()/rcu_read_unlock() is nop for TINY_RCU, but is not a nop for, say, PREEMPT_RCU.
proc_fill_cache() is called without RCU lock, there is no need to lock/unlock on error path, simply jump out of the loop.
Signed-off-by Alexey Dobriyan <[email protected]>
---
fs/proc/base.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-)
fs/proc/base.c +7 -6
@@ -1943,21 +1943,22 @@ static int proc_readfd_common(struct file * filp, void * dirent, fd++, filp->f_pos++) {char name[PROC_NUMBUF ];int len; +int rv;if (!fcheck_files (files, fd))continue ;rcu_read_unlock (); len =snprintf (name,sizeof (name),"%d" , fd); -if (proc_fill_cache (filp, dirent, filldir, - name, len, instantiate, - p, &fd) <0 ) { -rcu_read_lock (); -break ; - } + rv =proc_fill_cache (filp, dirent, filldir, + name, len, instantiate, p, + &fd); +if (rv <0 ) + goto out_fd_loop;rcu_read_lock (); }rcu_read_unlock (); +out_fd_loop:put_files_struct (files); } out: