[<prev] [next>] [day] [month] [year] [list]
Message-ID: <20120407190117.GA5946@p183.telecom.by>
Date: Sat, 7 Apr 2012 22:01:17 +0300
From: Alexey Dobriyan <adobriyan@...il.com>
To: akpm@...ux-foundation.org
Cc: linux-kernel@...r.kernel.org
Subject: [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 <adobriyan@...il.com>
---
fs/proc/base.c | 13 +++++++------
1 file changed, 7 insertions(+), 6 deletions(-)
--- a/fs/proc/base.c
+++ b/fs/proc/base.c
@@ -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:
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists