Re: [PATCH 23/25] xfs: fix pagecache truncation prior to reflink

Dave Chinner
2018-10-12T01:15:53Z

On Wed, Oct 10, 2018 at 09:15:12PM -0700, Darrick J. Wong wrote:
> From: Darrick J. Wong <darrick.wong@oracle.com>
>
> 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>
> ---
> fs/xfs/xfs_reflink.c | 5 +++--
> 1 file changed, 3 insertions(+), 2 deletions(-)
>
>
> diff --git a/fs/xfs/xfs_reflink.c b/fs/xfs/xfs_reflink.c
> index b24a2a1c4db1..e1592e751cc2 100644
> --- a/fs/xfs/xfs_reflink.c
> +++ b/fs/xfs/xfs_reflink.c
> @@ -1370,8 +1370,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);

Looks good.

Reviewed-by: Dave Chinner <dchinner@redhat.com>
--
Dave Chinner
david@fromorbit.com