On Thu, Feb 22, 2018 at 06:00:00PM -0800, Darrick J. Wong wrote: > From: Darrick J. Wong <darrick.wong@xxxxxxxxxx> > > There's no point in allocating a transaction and locking the inode in > preparation to clear cow blocks if there actually are any cow fork > extents. Therefore, move the xfs_reflink_cancel_cow_range hunk to > xfs_inactive and check the cow ifp first. This makes inode reclamation > run faster. > > Signed-off-by: Darrick J. Wong <darrick.wong@xxxxxxxxxx> > --- Reviewed-by: Brian Foster <bfoster@xxxxxxxxxx> > fs/xfs/xfs_inode.c | 5 +++++ > fs/xfs/xfs_super.c | 9 --------- > 2 files changed, 5 insertions(+), 9 deletions(-) > > > diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c > index 604ee38..50fbbf5 100644 > --- a/fs/xfs/xfs_inode.c > +++ b/fs/xfs/xfs_inode.c > @@ -1872,6 +1872,7 @@ xfs_inactive( > xfs_inode_t *ip) > { > struct xfs_mount *mp; > + struct xfs_ifork *cow_ifp = XFS_IFORK_PTR(ip, XFS_COW_FORK); > int error; > int truncate = 0; > > @@ -1892,6 +1893,10 @@ xfs_inactive( > if (mp->m_flags & XFS_MOUNT_RDONLY) > return; > > + /* Try to clean out the cow blocks if there are any. */ > + if (xfs_is_reflink_inode(ip) && cow_ifp->if_bytes > 0) > + xfs_reflink_cancel_cow_range(ip, 0, NULLFILEOFF, true); > + > if (VFS_I(ip)->i_nlink != 0) { > /* > * force is true because we are evicting an inode from the > diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c > index 7aba628..624a802 100644 > --- a/fs/xfs/xfs_super.c > +++ b/fs/xfs/xfs_super.c > @@ -970,7 +970,6 @@ xfs_fs_destroy_inode( > struct inode *inode) > { > struct xfs_inode *ip = XFS_I(inode); > - int error; > > trace_xfs_destroy_inode(ip); > > @@ -978,14 +977,6 @@ xfs_fs_destroy_inode( > XFS_STATS_INC(ip->i_mount, vn_rele); > XFS_STATS_INC(ip->i_mount, vn_remove); > > - if (xfs_is_reflink_inode(ip)) { > - error = xfs_reflink_cancel_cow_range(ip, 0, NULLFILEOFF, true); > - if (error && !XFS_FORCED_SHUTDOWN(ip->i_mount)) > - xfs_warn(ip->i_mount, > -"Error %d while evicting CoW blocks for inode %llu.", > - error, ip->i_ino); > - } > - > xfs_inactive(ip); > > ASSERT(XFS_FORCED_SHUTDOWN(ip->i_mount) || ip->i_delayed_blks == 0); > > -- > To unsubscribe from this list: send the line "unsubscribe linux-xfs" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe linux-xfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html