]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commitdiff
xfs_repair: fix bnobt and refcountbt record order checks
authorDarrick J. Wong <darrick.wong@oracle.com>
Fri, 10 Jul 2020 19:35:45 +0000 (15:35 -0400)
committerEric Sandeen <sandeen@sandeen.net>
Fri, 10 Jul 2020 19:35:45 +0000 (15:35 -0400)
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 <darrick.wong@oracle.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
repair/scan.c

index 1ddb57635e11fe8044bfd324a24a385ceda16e15..2d156d6417fdaea6ffbea25c917e0d596aaa0342 100644 (file)
@@ -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? */