mirror of
https://github.com/torvalds/linux.git
synced 2024-11-21 19:41:42 +00:00
xfs: don't coalesce file mappings that cross rtgroup boundaries in scrub
The bmbt scrubber will combine file mappings if they are mergeable to reduce the number of cross-referencing checks. However, we shouldn't combine mappings that cross rt group boundaries because that will cause verifiers to trip incorrectly. Signed-off-by: Darrick J. Wong <djwong@kernel.org> Reviewed-by: Christoph Hellwig <hch@lst.de>
This commit is contained in:
parent
d162491c54
commit
7333c948c2
@ -834,9 +834,12 @@ xchk_bmap_iext_mapping(
|
||||
/* Are these two mappings contiguous with each other? */
|
||||
static inline bool
|
||||
xchk_are_bmaps_contiguous(
|
||||
const struct xchk_bmap_info *info,
|
||||
const struct xfs_bmbt_irec *b1,
|
||||
const struct xfs_bmbt_irec *b2)
|
||||
{
|
||||
struct xfs_mount *mp = info->sc->mp;
|
||||
|
||||
/* Don't try to combine unallocated mappings. */
|
||||
if (!xfs_bmap_is_real_extent(b1))
|
||||
return false;
|
||||
@ -850,6 +853,17 @@ xchk_are_bmaps_contiguous(
|
||||
return false;
|
||||
if (b1->br_state != b2->br_state)
|
||||
return false;
|
||||
|
||||
/*
|
||||
* Don't combine bmaps that would cross rtgroup boundaries. This is a
|
||||
* valid state, but if combined they will fail rtb extent checks.
|
||||
*/
|
||||
if (info->is_rt && xfs_has_rtgroups(mp)) {
|
||||
if (xfs_rtb_to_rgno(mp, b1->br_startblock) !=
|
||||
xfs_rtb_to_rgno(mp, b2->br_startblock))
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -887,7 +901,7 @@ xchk_bmap_iext_iter(
|
||||
* that we just read, if possible.
|
||||
*/
|
||||
while (xfs_iext_peek_next_extent(ifp, &info->icur, &got)) {
|
||||
if (!xchk_are_bmaps_contiguous(irec, &got))
|
||||
if (!xchk_are_bmaps_contiguous(info, irec, &got))
|
||||
break;
|
||||
|
||||
if (!xchk_bmap_iext_mapping(info, &got)) {
|
||||
|
Loading…
Reference in New Issue
Block a user