Skip to content

Commit

Permalink
xfs: remove isize check from unshare operation
Browse files Browse the repository at this point in the history
Now that fallocate has an explicit unshare flag again, let's try
to remove the inode reflink flag whenever the user unshares any
part of a file since checking is cheap compared to the CoW.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reported-by: Brian Foster <bfoster@redhat.com>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
  • Loading branch information
Darrick J. Wong authored and Dave Chinner committed Oct 10, 2016
1 parent 024adf4 commit 97a1b87
Showing 1 changed file with 6 additions and 12 deletions.
18 changes: 6 additions & 12 deletions fs/xfs/xfs_reflink.c
Original file line number Diff line number Diff line change
Expand Up @@ -1570,8 +1570,7 @@ xfs_reflink_clear_inode_flag(
*/
STATIC int
xfs_reflink_try_clear_inode_flag(
struct xfs_inode *ip,
xfs_off_t old_isize)
struct xfs_inode *ip)
{
struct xfs_mount *mp = ip->i_mount;
struct xfs_trans *tp;
Expand All @@ -1585,9 +1584,6 @@ xfs_reflink_try_clear_inode_flag(
xfs_ilock(ip, XFS_ILOCK_EXCL);
xfs_trans_ijoin(tp, ip, 0);

if (old_isize != i_size_read(VFS_I(ip)))
goto cancel;

error = xfs_reflink_clear_inode_flag(ip, &tp);
if (error)
goto cancel;
Expand Down Expand Up @@ -1630,7 +1626,7 @@ xfs_reflink_unshare(

/* Try to CoW the selected ranges */
xfs_ilock(ip, XFS_ILOCK_EXCL);
fbno = XFS_B_TO_FSB(mp, offset);
fbno = XFS_B_TO_FSBT(mp, offset);
isize = i_size_read(VFS_I(ip));
end = XFS_B_TO_FSB(mp, offset + len);
error = xfs_reflink_dirty_extents(ip, fbno, end, isize);
Expand All @@ -1643,12 +1639,10 @@ xfs_reflink_unshare(
if (error)
goto out;

/* Turn off the reflink flag if we unshared the whole file */
if (offset == 0 && len == isize) {
error = xfs_reflink_try_clear_inode_flag(ip, isize);
if (error)
goto out;
}
/* Turn off the reflink flag if possible. */
error = xfs_reflink_try_clear_inode_flag(ip);
if (error)
goto out;

return 0;

Expand Down

0 comments on commit 97a1b87

Please sign in to comment.