From: Darrick J. Wong Date: Thu, 27 Feb 2020 19:50:01 +0000 (-0500) Subject: xfs_repair: enforce that inode btree chunks can't point to AG headers X-Git-Tag: v5.5.0-rc1~44 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=b1f7ac05b1fd9d74079136ba7d6576ebe91b2a82;p=users%2Fhch%2Fxfsprogs.git xfs_repair: enforce that inode btree chunks can't point to AG headers xfs_repair has a very old check that evidently excuses the AG 0 inode btrees pointing to blocks that are already marked XR_E_INUSE_FS* (e.g. AG headers). mkfs never formats filesystems that way and it looks like an error, so purge the check. After this, we always complain if inodes overlap with AG headers because that should never happen. Signed-off-by: Darrick J. Wong Reviewed-by: Christoph Hellwig [sandeen: removed unused switch cases that fall through to default] Signed-off-by: Eric Sandeen --- diff --git a/repair/globals.c b/repair/globals.c index dcd79ea4e..8a60e706d 100644 --- a/repair/globals.c +++ b/repair/globals.c @@ -73,7 +73,6 @@ int lost_gquotino; int lost_pquotino; xfs_agino_t first_prealloc_ino; -xfs_agino_t last_prealloc_ino; xfs_agblock_t bnobt_root; xfs_agblock_t bcntbt_root; xfs_agblock_t inobt_root; diff --git a/repair/globals.h b/repair/globals.h index 008bdd90e..2ed5c8946 100644 --- a/repair/globals.h +++ b/repair/globals.h @@ -114,7 +114,6 @@ extern int lost_gquotino; extern int lost_pquotino; extern xfs_agino_t first_prealloc_ino; -extern xfs_agino_t last_prealloc_ino; extern xfs_agblock_t bnobt_root; extern xfs_agblock_t bcntbt_root; extern xfs_agblock_t inobt_root; diff --git a/repair/scan.c b/repair/scan.c index c383f3aa1..34dcb22ae 100644 --- a/repair/scan.c +++ b/repair/scan.c @@ -1643,15 +1643,6 @@ scan_single_ino_chunk( case XR_E_INO1: /* seen by rmap */ set_bmap(agno, agbno, XR_E_INO); break; - case XR_E_INUSE_FS: - case XR_E_INUSE_FS1: - if (agno == 0 && - ino + j >= first_prealloc_ino && - ino + j < last_prealloc_ino) { - set_bmap(agno, agbno, XR_E_INO); - break; - } - /* fall through */ default: /* XXX - maybe should mark block a duplicate */ do_warn( @@ -1780,20 +1771,6 @@ _("inode chunk claims untracked block, finobt block - agno %d, bno %d, inopb %d\ set_bmap(agno, agbno, XR_E_INO); suspect++; break; - case XR_E_INUSE_FS: - case XR_E_INUSE_FS1: - if (agno == 0 && - ino + j >= first_prealloc_ino && - ino + j < last_prealloc_ino) { - do_warn( -_("inode chunk claims untracked block, finobt block - agno %d, bno %d, inopb %d\n"), - agno, agbno, mp->m_sb.sb_inopblock); - - set_bmap(agno, agbno, XR_E_INO); - suspect++; - break; - } - /* fall through */ default: do_warn( _("inode chunk claims used block, finobt block - agno %d, bno %d, inopb %d\n"), diff --git a/repair/xfs_repair.c b/repair/xfs_repair.c index 9295673dd..3e9059f37 100644 --- a/repair/xfs_repair.c +++ b/repair/xfs_repair.c @@ -460,13 +460,6 @@ calc_mkfs(xfs_mount_t *mp) first_prealloc_ino = XFS_AGB_TO_AGINO(mp, fino_bno); } - ASSERT(M_IGEO(mp)->ialloc_blks > 0); - - if (M_IGEO(mp)->ialloc_blks > 1) - last_prealloc_ino = first_prealloc_ino + XFS_INODES_PER_CHUNK; - else - last_prealloc_ino = XFS_AGB_TO_AGINO(mp, fino_bno + 1); - /* * now the first 3 inodes in the system */