prune back iprune_sem
authorChristoph Hellwig <hch@lst.de>
Tue, 15 Mar 2011 20:51:24 +0000 (21:51 +0100)
committerAl Viro <viro@zeniv.linux.org.uk>
Wed, 16 Mar 2011 13:56:03 +0000 (09:56 -0400)
commitbab1d9444d9a147f1dc3478dd06c16f490227f3e
treee5dd5220c976f604163c0b96945af3ee0be1fe24
parent5229645bdc35f1cc43eb8b25b6993c8fa58b4b43
prune back iprune_sem

iprune_sem is continously giving us lockdep warnings because we do take it in
read mode in the reclaim path, but we're also doing non-NOFS allocations under
it taken in write mode.

Taking a bit deeper look at it I think it's fixable quite trivially:

 - for invalidate_inodes we do not need iprune_sem at all.  We have an active
   reference on the superblock, so the filesystem is not going away until it
   has finished.
 - for evict_inodes we do need it, to make sure prune_icache has done it's
   work before we tear down the superblock.  But there is no reason to
   hold it over the actual reclaim operation - it's enough to cycle through
   it after the actual reclaim to make sure we wait for any pending
   prune_icache to complete.  We just have to remove the WARN_ON for
   otherwise busy inodes as they can actually happen now.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/inode.c