On Thu, Jun 04, 2020 at 05:45:56PM +1000, Dave Chinner wrote: > From: Dave Chinner <dchinner@xxxxxxxxxx> > > When we attempt to reclaim an inode, the first thing we do is take > 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> > Reviewed-by: Darrick J. Wong <darrick.wong@xxxxxxxxxx> > --- Reviewed-by: Brian Foster <bfoster@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 c4ba8d7bc45bc..d1c47a0e0b0ec 100644 > --- a/fs/xfs/xfs_icache.c > +++ b/fs/xfs/xfs_icache.c > @@ -1119,9 +1119,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); > @@ -1188,8 +1189,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 >