inode: add hlist_fake to avoid the inode hash lock in evict
authorJosef Bacik <jbacik@fb.com>
Thu, 12 Mar 2015 12:19:11 +0000 (08:19 -0400)
committerJosef Bacik <jbacik@fb.com>
Mon, 17 Aug 2015 22:39:45 +0000 (18:39 -0400)
commitcbedaac63481dea52327127a9f1c60f092bd6b07
tree81c37c05fe0de630170100a8d358d27813d57994
parentd353d7587d02116b9732d5c06615aed75a4d3a47
inode: add hlist_fake to avoid the inode hash lock in evict

Some filesystems don't use the VFS inode hash and fake the fact they
are hashed so that all the writeback code works correctly. However,
this means the evict() path still tries to remove the inode from the
hash, meaning that the inode_hash_lock() needs to be taken
unnecessarily. Hence under certain workloads the inode_hash_lock can
be contended even if the inode is never actually hashed.

To avoid this add hlist_fake to test if the inode isn't actually
hashed to avoid taking the hash lock on inodes that have never been
hashed.  Based on Dave Chinner's

inode: add IOP_NOTHASHED to avoid inode hash lock in evict

basd on Al's suggestions.  Thanks,

Signed-off-by: Josef Bacik <jbacik@fb.com>
Reviewed-by: Jan Kara <jack@suse.cz>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Tested-by: Dave Chinner <dchinner@redhat.com>
include/linux/fs.h
include/linux/list.h