]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commitdiff
xfs_repair: enforce that inode btree chunks can't point to AG headers
authorDarrick J. Wong <darrick.wong@oracle.com>
Thu, 27 Feb 2020 19:50:01 +0000 (14:50 -0500)
committerEric Sandeen <sandeen@sandeen.net>
Thu, 27 Feb 2020 19:50:01 +0000 (14:50 -0500)
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 <darrick.wong@oracle.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
[sandeen: removed unused switch cases that fall through to default]
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
repair/globals.c
repair/globals.h
repair/scan.c
repair/xfs_repair.c

index dcd79ea4e002ce3f55452aa942de21e42bd3deaa..8a60e706d94084cb66444f90a1c173774dd0a3e1 100644 (file)
@@ -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;
index 008bdd90e497dac0e9af70d24d184d0149f067a4..2ed5c894643c86f4a46e5ac34fd248128ea97c68 100644 (file)
@@ -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;
index c383f3aa1f84e0dd875f3849810277fe243074ce..34dcb22aec2cedb57a09bdf4f3200c6808862cbc 100644 (file)
@@ -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"),
index 9295673dde724009cf5a250f810a1596d0774b48..3e9059f37e4d6322d9ccf3f204f0dea741072ea9 100644 (file)
@@ -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
         */