提交 35fd7530 编写于 作者: C Chandan Babu R 提交者: Zheng Zengkai

xfs: Check for extent overflow when swapping extents

mainline inclusion
from mainline-v5.12-rc1
commit bcc561f2
category: bugfix
bugzilla: 187510,https://gitee.com/openeuler/kernel/issues/I4KIAO

Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=bcc561f21f115437a010307420fc43d91be91c66

--------------------------------

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>
Signed-off-by: NYu Kuai <yukuai3@huawei.com>
Signed-off-by: NGuo Xuenan <guoxuenan@huawei.com>
Reviewed-by: NZhang Yi <yi.zhang@huawei.com>
Signed-off-by: NZheng Zengkai <zhengzengkai@huawei.com>
上级 8be47263
...@@ -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.
*/ */
......
...@@ -1367,6 +1367,22 @@ xfs_swap_extent_rmap( ...@@ -1367,6 +1367,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.
先完成此消息的编辑!
想要评论请 注册