On Fri, May 22, 2020 at 01:50:21PM +1000, Dave Chinner wrote: > From: Dave Chinner <dchinner@xxxxxxxxxx> > > When we attempt to reclaim an inode, the first thing we do it take "...we do is take the inode lock." With that fixed, Reviewed-by: Darrick J. Wong <darrick.wong@xxxxxxxxxx> --D > the inode lock. This is blocking right now, so if the inode being > accessed by something else (e.g. being flushed to the cluster > buffer) we will block here. > > Change this to a trylock so that we do not block inode reclaim > unnecessarily here. > > Signed-off-by: Dave Chinner <dchinner@xxxxxxxxxx> > --- > fs/xfs/xfs_icache.c | 8 +++++--- > 1 file changed, 5 insertions(+), 3 deletions(-) > > diff --git a/fs/xfs/xfs_icache.c b/fs/xfs/xfs_icache.c > index f44493b2eae77..c020d2379e12e 100644 > --- a/fs/xfs/xfs_icache.c > +++ b/fs/xfs/xfs_icache.c > @@ -1138,9 +1138,10 @@ xfs_reclaim_inode( > { > xfs_ino_t ino = ip->i_ino; /* for radix_tree_delete */ > > - xfs_ilock(ip, XFS_ILOCK_EXCL); > - if (!xfs_iflock_nowait(ip)) > + if (!xfs_ilock_nowait(ip, XFS_ILOCK_EXCL)) > goto out; > + if (!xfs_iflock_nowait(ip)) > + goto out_iunlock; > > if (XFS_FORCED_SHUTDOWN(ip->i_mount)) { > xfs_iunpin_wait(ip); > @@ -1157,8 +1158,9 @@ xfs_reclaim_inode( > > out_ifunlock: > xfs_ifunlock(ip); > -out: > +out_iunlock: > xfs_iunlock(ip, XFS_ILOCK_EXCL); > +out: > xfs_iflags_clear(ip, XFS_IRECLAIM); > return false; > > -- > 2.26.2.761.g0e0b3e54be >