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: Darrick J. Wong <darrick.wong@oracle.com> Reviewed-by: Dave Chinner <dchinner@redhat.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Dave Chinner <david@fromorbit.com>
This commit is contained in:
parent
65f098e91f
commit
4918ef4ea0
|
@ -1369,8 +1369,9 @@ xfs_reflink_remap_prep(
|
|||
goto out_unlock;
|
||||
|
||||
/* Zap any page cache for the destination file's range. */
|
||||
truncate_inode_pages_range(&inode_out->i_data, pos_out,
|
||||
PAGE_ALIGN(pos_out + *len) - 1);
|
||||
truncate_inode_pages_range(&inode_out->i_data,
|
||||
round_down(pos_out, PAGE_SIZE),
|
||||
round_up(pos_out + *len, PAGE_SIZE) - 1);
|
||||
|
||||
return 1;
|
||||
out_unlock:
|
||||
|
|
Loading…
Reference in New Issue