xfs: handle non-inode owners for rtrmap record checking

LOLLM noticed that two helper functions in the rtrmapbt scrub code don't
actually handle non-inode owners correctly -- CoW staging extents and
rgsuperblock extents are not shareable, but they are mergeable.  Fix
these two helpers.

Cc: stable@vger.kernel.org # v6.14
Fixes: 2d9a3e9805 ("xfs: allow overlapping rtrmapbt records for shared data extents")
Signed-off-by: "Darrick J. Wong" <djwong@kernel.org>
Assisted-by: LOLLM # finding obvious bugs
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Carlos Maiolino <cem@kernel.org>
This commit is contained in:
Darrick J. Wong
2026-07-13 23:06:43 -07:00
committed by Carlos Maiolino
parent 5d72a68f20
commit 353a5900bc

View File

@@ -87,6 +87,9 @@ xchk_rtrmapbt_is_shareable(
return false;
if (irec->rm_flags & XFS_RMAP_UNWRITTEN)
return false;
if (irec->rm_owner == XFS_RMAP_OWN_COW ||
irec->rm_owner == XFS_RMAP_OWN_FS)
return false;
return true;
}
@@ -146,6 +149,9 @@ xchk_rtrmap_mergeable(
return false;
if (r1->rm_flags != r2->rm_flags)
return false;
if (r1->rm_owner == XFS_RMAP_OWN_COW ||
r1->rm_owner == XFS_RMAP_OWN_FS)
return true;
return r1->rm_offset + r1->rm_blockcount == r2->rm_offset;
}