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

xfs: Check for extent overflow when swapping extents

Removing an initial range of source/donor file's extent and adding a new
extent (from donor/source file) in its place will cause extent count to
increase by 1.
Reviewed-by: NDarrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: NAllison Henderson <allison.henderson@oracle.com>
Signed-off-by: NChandan Babu R <chandanrlinux@gmail.com>
Signed-off-by: NDarrick J. Wong <darrick.wong@oracle.com>
上级 ee898d78
...@@ -88,6 +88,13 @@ struct xfs_ifork { ...@@ -88,6 +88,13 @@ struct xfs_ifork {
*/ */
#define XFS_IEXT_REFLINK_END_COW_CNT (2) #define XFS_IEXT_REFLINK_END_COW_CNT (2)
/*
* Removing an initial range of source/donor file's extent and adding a new
* extent (from donor/source file) in its place will cause extent count to
* increase by 1.
*/
#define XFS_IEXT_SWAP_RMAP_CNT (1)
/* /*
* Fork handling. * Fork handling.
*/ */
......
...@@ -1399,6 +1399,22 @@ xfs_swap_extent_rmap( ...@@ -1399,6 +1399,22 @@ xfs_swap_extent_rmap(
irec.br_blockcount); irec.br_blockcount);
trace_xfs_swap_extent_rmap_remap_piece(tip, &uirec); trace_xfs_swap_extent_rmap_remap_piece(tip, &uirec);
if (xfs_bmap_is_real_extent(&uirec)) {
error = xfs_iext_count_may_overflow(ip,
XFS_DATA_FORK,
XFS_IEXT_SWAP_RMAP_CNT);
if (error)
goto out;
}
if (xfs_bmap_is_real_extent(&irec)) {
error = xfs_iext_count_may_overflow(tip,
XFS_DATA_FORK,
XFS_IEXT_SWAP_RMAP_CNT);
if (error)
goto out;
}
/* Remove the mapping from the donor file. */ /* Remove the mapping from the donor file. */
xfs_bmap_unmap_extent(tp, tip, &uirec); xfs_bmap_unmap_extent(tp, tip, &uirec);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册