|
Message-ID: <87h7zl9e7u.fsf_-_@x220.int.ebiederm.org> Date: Thu, 20 Feb 2020 14:49:09 -0600 From: ebiederm@...ssion.com (Eric W. Biederman) To: Linus Torvalds <torvalds@...ux-foundation.org> Cc: Al Viro <viro@...iv.linux.org.uk>, LKML <linux-kernel@...r.kernel.org>, Kernel Hardening <kernel-hardening@...ts.openwall.com>, Linux API <linux-api@...r.kernel.org>, Linux FS Devel <linux-fsdevel@...r.kernel.org>, Linux Security Module <linux-security-module@...r.kernel.org>, Akinobu Mita <akinobu.mita@...il.com>, Alexey Dobriyan <adobriyan@...il.com>, Andrew Morton <akpm@...ux-foundation.org>, Andy Lutomirski <luto@...nel.org>, Daniel Micay <danielmicay@...il.com>, Djalal Harouni <tixxdz@...il.com>, "Dmitry V . Levin" <ldv@...linux.org>, Greg Kroah-Hartman <gregkh@...uxfoundation.org>, Ingo Molnar <mingo@...nel.org>, "J . Bruce Fields" <bfields@...ldses.org>, Jeff Layton <jlayton@...chiereds.net>, Jonathan Corbet <corbet@....net>, Kees Cook <keescook@...omium.org>, Oleg Nesterov <oleg@...hat.com>, Solar Designer <solar@...nwall.com> Subject: [PATCH 3/7] proc: Mov rcu_read_(lock|unlock) in proc_prune_siblings_dcache Don't make it look like rcu_read_lock is held over the entire loop instead just take the rcu_read_lock over the part of the loop that matters. This makes the intent of the code a little clearer. Signed-off-by: "Eric W. Biederman" <ebiederm@...ssion.com> --- fs/proc/inode.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/fs/proc/inode.c b/fs/proc/inode.c index 74ce4a8d05eb..38a7baa41aba 100644 --- a/fs/proc/inode.c +++ b/fs/proc/inode.c @@ -110,11 +110,13 @@ void proc_prune_siblings_dcache(struct hlist_head *inodes, spinlock_t *lock) struct hlist_node *node; struct super_block *sb; - rcu_read_lock(); for (;;) { + rcu_read_lock(); node = hlist_first_rcu(inodes); - if (!node) + if (!node) { + rcu_read_unlock(); break; + } ei = hlist_entry(node, struct proc_inode, sibling_inodes); spin_lock(lock); hlist_del_init_rcu(&ei->sibling_inodes); @@ -122,23 +124,21 @@ void proc_prune_siblings_dcache(struct hlist_head *inodes, spinlock_t *lock) inode = &ei->vfs_inode; sb = inode->i_sb; - if (!atomic_inc_not_zero(&sb->s_active)) + if (!atomic_inc_not_zero(&sb->s_active)) { + rcu_read_unlock(); continue; + } inode = igrab(inode); rcu_read_unlock(); if (unlikely(!inode)) { deactivate_super(sb); - rcu_read_lock(); continue; } d_prune_aliases(inode); iput(inode); deactivate_super(sb); - - rcu_read_lock(); } - rcu_read_unlock(); } static int proc_show_options(struct seq_file *seq, struct dentry *root) -- 2.20.1
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.