From: Darrick J. Wong Date: Fri, 10 Jul 2020 19:35:45 +0000 (-0400) Subject: xfs_repair: fix bnobt and refcountbt record order checks X-Git-Tag: xfsprogs-5.7-fixes_2020-07-14~28 X-Git-Url: http://git.ipfire.org/gitweb/gitweb.cgi?a=commitdiff_plain;h=2212e773d0f8ae1424b80e46e2865d2f02b0e183;p=thirdparty%2Fxfsprogs-dev.git xfs_repair: fix bnobt and refcountbt record order checks The bnobt and refcountbt scanners attempt to check that records are in the correct order. However, the lastblock variable in both functions ought to be set to the end of the previous record (instead of the start) because otherwise we fail to catch overlapping records, which are not allowed in either btree type. Found by running xfs/410 with recs[1].blockcount = middlebit. Signed-off-by: Darrick J. Wong Reviewed-by: Christoph Hellwig Signed-off-by: Eric Sandeen --- diff --git a/repair/scan.c b/repair/scan.c index 1ddb57635..2d156d641 100644 --- a/repair/scan.c +++ b/repair/scan.c @@ -699,7 +699,7 @@ _("%s freespace btree block claimed (state %d), agno %d, bno %d, suspect %d\n"), "out-of-order bno btree record %d (%u %u) block %u/%u\n"), i, b, len, agno, bno); } else { - lastblock = b; + lastblock = end - 1; } } else { agcnts->fdblocks += len; @@ -1396,7 +1396,7 @@ _("extent (%u/%u) len %u claimed, state is %d\n"), "out-of-order %s btree record %d (%u %u) block %u/%u\n"), name, i, b, len, agno, bno); } else { - lastblock = b; + lastblock = end - 1; } /* Is this record mergeable with the last one? */