Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4918ef4e authored by Darrick J. Wong's avatar Darrick J. Wong Committed by Dave Chinner
Browse files

xfs: fix pagecache truncation prior to reflink



Prior to remapping blocks, it is necessary to remove pages from the
destination file's page cache.  Unfortunately, the truncation is not
aggressive enough -- if page size > block size, we'll end up zeroing
subpage blocks instead of removing them.  So, round the start offset
down and the end offset up to page boundaries.  We already wrote all
the dirty data so the larger range shouldn't be a problem.

Signed-off-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: default avatarDave Chinner <dchinner@redhat.com>
Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
Signed-off-by: default avatarDave Chinner <david@fromorbit.com>
parent 65f098e9
Loading
Loading
Loading
Loading
+3 −2
Original line number Original line Diff line number Diff line
@@ -1369,8 +1369,9 @@ xfs_reflink_remap_prep(
		goto out_unlock;
		goto out_unlock;


	/* Zap any page cache for the destination file's range. */
	/* Zap any page cache for the destination file's range. */
	truncate_inode_pages_range(&inode_out->i_data, pos_out,
	truncate_inode_pages_range(&inode_out->i_data,
				   PAGE_ALIGN(pos_out + *len) - 1);
			round_down(pos_out, PAGE_SIZE),
			round_up(pos_out + *len, PAGE_SIZE) - 1);


	return 1;
	return 1;
out_unlock:
out_unlock: