提交 ee898d78 编写于 作者: C Chandan Babu R 提交者: Darrick J. Wong

xfs: Check for extent overflow when remapping an extent

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.
Reviewed-by: NAllison Henderson <allison.henderson@oracle.com>
Reviewed-by: NDarrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: NChandan Babu R <chandanrlinux@gmail.com>
Signed-off-by: NDarrick J. Wong <darrick.wong@oracle.com>
上级 5f1d5bbf
......@@ -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
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册