mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-07-22 04:37:32 -04:00
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:
committed by
Carlos Maiolino
parent
5d72a68f20
commit
353a5900bc
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user