summaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorEric Dumazet <eric.dumazet@gmail.com>2011-07-28 06:41:09 +0200
committerAl Viro <viro@zeniv.linux.org.uk>2011-08-01 07:41:17 +0200
commitf2ee7abf4c40c8e6bffced923a7c01ea2d1f6c97 (patch)
tree3c7ec119cf89f82737c55235ff7881ebeed9408f /include
parentvfs: conditionally call inode_wb_list_del() (diff)
downloadlinux-f2ee7abf4c40c8e6bffced923a7c01ea2d1f6c97.tar.xz
linux-f2ee7abf4c40c8e6bffced923a7c01ea2d1f6c97.zip
vfs: avoid taking inode_hash_lock on pipes and sockets
Some inodes (pipes, sockets, ...) are not hashed, no need to take contended inode_hash_lock at dismantle time. nice speedup on SMP machines on socket intensive workloads. Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'include')
-rw-r--r--include/linux/fs.h9
1 files changed, 8 insertions, 1 deletions
diff --git a/include/linux/fs.h b/include/linux/fs.h
index f23bcb77260c..786b3b1113cf 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -2317,11 +2317,18 @@ extern int should_remove_suid(struct dentry *);
extern int file_remove_suid(struct file *);
extern void __insert_inode_hash(struct inode *, unsigned long hashval);
-extern void remove_inode_hash(struct inode *);
static inline void insert_inode_hash(struct inode *inode)
{
__insert_inode_hash(inode, inode->i_ino);
}
+
+extern void __remove_inode_hash(struct inode *);
+static inline void remove_inode_hash(struct inode *inode)
+{
+ if (!inode_unhashed(inode))
+ __remove_inode_hash(inode);
+}
+
extern void inode_sb_list_add(struct inode *inode);
#ifdef CONFIG_BLOCK