From: Darrick J. Wong Date: Tue, 7 Mar 2023 03:56:19 +0000 (-0800) Subject: xfs: update rmap to allow cow staging extents in the rt rmap X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=34bf1aaf6bee6890d7532d41aec9ab4e8d0d1d31;p=users%2Fhch%2Fxfsprogs.git xfs: update rmap to allow cow staging extents in the rt rmap Don't error out on CoW staging extent records when realtime reflink is enabled. Signed-off-by: Darrick J. Wong --- diff --git a/libxfs/xfs_rmap.c b/libxfs/xfs_rmap.c index e43ff529b..15790d7d6 100644 --- a/libxfs/xfs_rmap.c +++ b/libxfs/xfs_rmap.c @@ -274,6 +274,7 @@ xfs_rmap_check_rtgroup_irec( bool is_unwritten; bool is_bmbt; bool is_attr; + bool is_cow; if (irec->rm_blockcount == 0) return __this_address; @@ -285,6 +286,12 @@ xfs_rmap_check_rtgroup_irec( return __this_address; if (irec->rm_offset != 0) return __this_address; + } else if (irec->rm_owner == XFS_RMAP_OWN_COW) { + if (!xfs_has_rtreflink(mp)) + return __this_address; + if (!xfs_verify_rgbext(rtg, irec->rm_startblock, + irec->rm_blockcount)) + return __this_address; } else { if (!xfs_verify_rgbext(rtg, irec->rm_startblock, irec->rm_blockcount)) @@ -301,8 +308,10 @@ xfs_rmap_check_rtgroup_irec( is_bmbt = irec->rm_flags & XFS_RMAP_BMBT_BLOCK; is_attr = irec->rm_flags & XFS_RMAP_ATTR_FORK; is_unwritten = irec->rm_flags & XFS_RMAP_UNWRITTEN; + is_cow = xfs_has_rtreflink(mp) && + irec->rm_owner == XFS_RMAP_OWN_COW; - if (!is_inode && irec->rm_owner != XFS_RMAP_OWN_FS) + if (!is_inode && !is_cow && irec->rm_owner != XFS_RMAP_OWN_FS) return __this_address; if (!is_inode && irec->rm_offset != 0) @@ -314,6 +323,9 @@ xfs_rmap_check_rtgroup_irec( if (is_unwritten && !is_inode) return __this_address; + if (is_unwritten && is_cow) + return __this_address; + /* Check for a valid fork offset, if applicable. */ if (is_inode && !xfs_verify_fileext(mp, irec->rm_offset, irec->rm_blockcount))