aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/xfs/xfs_super.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c
index aeb03f9a8967..168d4984ce89 100644
--- a/fs/xfs/xfs_super.c
+++ b/fs/xfs/xfs_super.c
@@ -603,6 +603,7 @@ xfs_agnumber_t
603xfs_set_inode32(struct xfs_mount *mp) 603xfs_set_inode32(struct xfs_mount *mp)
604{ 604{
605 xfs_agnumber_t index = 0; 605 xfs_agnumber_t index = 0;
606 xfs_agnumber_t maxagi = 0;
606 xfs_sb_t *sbp = &mp->m_sb; 607 xfs_sb_t *sbp = &mp->m_sb;
607 xfs_agnumber_t max_metadata; 608 xfs_agnumber_t max_metadata;
608 xfs_agino_t agino = XFS_OFFBNO_TO_AGINO(mp, sbp->sb_agblocks -1, 0); 609 xfs_agino_t agino = XFS_OFFBNO_TO_AGINO(mp, sbp->sb_agblocks -1, 0);
@@ -626,18 +627,26 @@ xfs_set_inode32(struct xfs_mount *mp)
626 627
627 for (index = 0; index < sbp->sb_agcount; index++) { 628 for (index = 0; index < sbp->sb_agcount; index++) {
628 ino = XFS_AGINO_TO_INO(mp, index, agino); 629 ino = XFS_AGINO_TO_INO(mp, index, agino);
630
629 if (ino > XFS_MAXINUMBER_32) { 631 if (ino > XFS_MAXINUMBER_32) {
630 index++; 632 pag = xfs_perag_get(mp, index);
631 break; 633 pag->pagi_inodeok = 0;
634 pag->pagf_metadata = 0;
635 xfs_perag_put(pag);
636 continue;
632 } 637 }
633 638
634 pag = xfs_perag_get(mp, index); 639 pag = xfs_perag_get(mp, index);
635 pag->pagi_inodeok = 1; 640 pag->pagi_inodeok = 1;
641 maxagi++;
636 if (index < max_metadata) 642 if (index < max_metadata)
637 pag->pagf_metadata = 1; 643 pag->pagf_metadata = 1;
638 xfs_perag_put(pag); 644 xfs_perag_put(pag);
639 } 645 }
640 return index; 646 mp->m_flags |= (XFS_MOUNT_32BITINODES |
647 XFS_MOUNT_SMALL_INUMS);
648
649 return maxagi;
641} 650}
642 651
643xfs_agnumber_t 652xfs_agnumber_t