From: Darrick J. Wong Date: Fri, 10 Jul 2020 19:35:45 +0000 (-0400) Subject: xfs_repair: check for out-of-order inobt records X-Git-Tag: xfsprogs-5.7-fixes_2020-07-14~27 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=2a0f9efe03aed1ec0b2c6a45ba9472646848c02f;p=thirdparty%2Fxfsprogs-dev.git xfs_repair: check for out-of-order inobt records Make sure that the inode btree records are in order. 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 2d156d641..7c46ab899 100644 --- a/repair/scan.c +++ b/repair/scan.c @@ -1947,6 +1947,7 @@ scan_inobt( const struct xfs_buf_ops *ops) { struct aghdr_cnts *agcnts = priv; + xfs_agino_t lastino = 0; int i; int numrecs; int state; @@ -2029,7 +2030,16 @@ _("inode btree block claimed (state %d), agno %d, bno %d, suspect %d\n"), * the block. skip processing of bogus records. */ for (i = 0; i < numrecs; i++) { + xfs_agino_t startino; + freecount = inorec_get_freecount(mp, &rp[i]); + startino = be32_to_cpu(rp[i].ir_startino); + if (i > 0 && startino <= lastino) + do_warn(_( + "out-of-order ino btree record %d (%u) block %u/%u\n"), + i, startino, agno, bno); + else + lastino = startino + XFS_INODES_PER_CHUNK - 1; if (magic == XFS_IBT_MAGIC || magic == XFS_IBT_CRC_MAGIC) {