Re: [PATCH V7 08/14] xfs: Check for extent overflow when remapping an extent

Darrick J. Wong
2020-10-26T23:10:50Z

On Mon, Oct 19, 2020 at 12:10:42PM +0530, Chandan Babu R wrote:
> Remapping an extent involves unmapping the existing extent and mapping
> in the new extent. When unmapping, an extent containing the entire unmap
> range can be split into two extents,
> i.e. | Old extent | hole | Old extent |
> Hence extent count increases by 1.
>
> Mapping in the new extent into the destination file can increase the
> extent count by 1.
>
> Signed-off-by: Chandan Babu R <chandanrlinux@gmail.com>

Looks fine,
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>

--D

> ---
> fs/xfs/xfs_reflink.c | 11 +++++++++++
> 1 file changed, 11 insertions(+)
>
> diff --git a/fs/xfs/xfs_reflink.c b/fs/xfs/xfs_reflink.c
> index 4f0198f636ad..856fe755a5e9 100644
> --- a/fs/xfs/xfs_reflink.c
> +++ b/fs/xfs/xfs_reflink.c
> @@ -1006,6 +1006,7 @@ xfs_reflink_remap_extent(
> unsigned int resblks;
> bool smap_real;
> bool dmap_written = xfs_bmap_is_written_extent(dmap);
> + int iext_delta = 0;
> int nimaps;
> int error;
>
> @@ -1099,6 +1100,16 @@ xfs_reflink_remap_extent(
> goto out_cancel;
> }
>
> + if (smap_real)
> + ++iext_delta;
> +
> + if (dmap_written)
> + ++iext_delta;
> +
> + error = xfs_iext_count_may_overflow(ip, XFS_DATA_FORK, iext_delta);
> + if (error)
> + goto out_cancel;
> +
> if (smap_real) {
> /*
> * If the extent we're unmapping is backed by storage (written
> --
> 2.28.0
>