|
@@ -954,13 +954,14 @@ STATIC int
|
|
|
xfs_reflink_update_dest(
|
|
|
struct xfs_inode *dest,
|
|
|
xfs_off_t newlen,
|
|
|
- xfs_extlen_t cowextsize)
|
|
|
+ xfs_extlen_t cowextsize,
|
|
|
+ bool is_dedupe)
|
|
|
{
|
|
|
struct xfs_mount *mp = dest->i_mount;
|
|
|
struct xfs_trans *tp;
|
|
|
int error;
|
|
|
|
|
|
- if (newlen <= i_size_read(VFS_I(dest)) && cowextsize == 0)
|
|
|
+ if (is_dedupe && newlen <= i_size_read(VFS_I(dest)) && cowextsize == 0)
|
|
|
return 0;
|
|
|
|
|
|
error = xfs_trans_alloc(mp, &M_RES(mp)->tr_ichange, 0, 0, 0, &tp);
|
|
@@ -981,6 +982,10 @@ xfs_reflink_update_dest(
|
|
|
dest->i_d.di_flags2 |= XFS_DIFLAG2_COWEXTSIZE;
|
|
|
}
|
|
|
|
|
|
+ if (!is_dedupe) {
|
|
|
+ xfs_trans_ichgtime(tp, dest,
|
|
|
+ XFS_ICHGTIME_MOD | XFS_ICHGTIME_CHG);
|
|
|
+ }
|
|
|
xfs_trans_log_inode(tp, dest, XFS_ILOG_CORE);
|
|
|
|
|
|
error = xfs_trans_commit(tp);
|
|
@@ -1294,7 +1299,8 @@ xfs_reflink_remap_range(
|
|
|
!(dest->i_d.di_flags2 & XFS_DIFLAG2_COWEXTSIZE))
|
|
|
cowextsize = src->i_d.di_cowextsize;
|
|
|
|
|
|
- ret = xfs_reflink_update_dest(dest, pos_out + len, cowextsize);
|
|
|
+ ret = xfs_reflink_update_dest(dest, pos_out + len, cowextsize,
|
|
|
+ is_dedupe);
|
|
|
|
|
|
out_unlock:
|
|
|
xfs_iunlock(src, XFS_MMAPLOCK_EXCL);
|