On Wed, Jul 31, 2013 at 02:15:41PM +1000, Dave Chinner wrote: > From: Dave Chinner <dchinner@xxxxxxxxxx> > > 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 an inode opflag to allow inode_hash_remove() to > avoid taking the hash lock on inodes have never actually been > hashed. Good idea, but I don't like how it's implemented. First a formality: i_opflags really is for flags showing that inode operations exist, not for addional bits. Just use i_flags for it. Second this is a hack hacking around a hack. We just mark the inode hashed so that writeback doesn't ignore it, and not we need to work around the fact that we don't want an inode marked hashed from the hashlist. As the most simple version I'd suggest to just add an I_NEEDS_WRITEBACK flag which gets set by __insert_inode_hash, and all the current users of hlist_add_fake on i_hash, as well as the block devices that currently have another special case in the writeback code. Thinking about it I'm not even sure I_NEEDS_WRITEBACK is needed, no that we have I_NEW as a marker a negative test for it should be enough, but doing this might require some further research. -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html