xfs
[Top] [All Lists]

[PATCH 5/6] xfs: add inode64->inode32 transition into xfs_set_inode32()

To: xfs@xxxxxxxxxxx
Subject: [PATCH 5/6] xfs: add inode64->inode32 transition into xfs_set_inode32()
From: Carlos Maiolino <cmaiolino@xxxxxxxxxx>
Date: Thu, 20 Sep 2012 10:32:40 -0300
In-reply-to: <1348147961-7520-1-git-send-email-cmaiolino@xxxxxxxxxx>
References: <1348147961-7520-1-git-send-email-cmaiolino@xxxxxxxxxx>
To make inode32 a remountable option, xfs_set_inode32() should be able to make a
transition from inode64 option, disabling inode allocation on higher AGs.

Signed-off-by: Carlos Maiolino <cmaiolino@xxxxxxxxxx>
---
 fs/xfs/xfs_super.c | 15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)

diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c
index 966f56c..3329296 100644
--- a/fs/xfs/xfs_super.c
+++ b/fs/xfs/xfs_super.c
@@ -603,6 +603,7 @@ xfs_agnumber_t
 xfs_set_inode32(struct xfs_mount *mp)
 {
        xfs_agnumber_t  index = 0;
+       xfs_agnumber_t  maxagi = 0;
        xfs_sb_t        *sbp = &mp->m_sb;
        xfs_agnumber_t  max_metadata;
        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)
 
        for (index = 0; index < sbp->sb_agcount; index++) {
                ino = XFS_AGINO_TO_INO(mp, index, agino);
+
                if (ino > XFS_MAXINUMBER_32) {
-                       index++;
-                       break;
+                       pag = xfs_perag_get(mp, index);
+                       pag->pagi_inodeok = 0;
+                       pag->pagf_metadata = 0;
+                       xfs_perag_put(pag);
+                       continue;
                }
 
                pag = xfs_perag_get(mp, index);
                pag->pagi_inodeok = 1;
+               maxagi++;
                if (index < max_metadata)
                        pag->pagf_metadata = 1;
                xfs_perag_put(pag);
        }
-       return index;
+       mp->m_flags |= (XFS_MOUNT_32BITINODES |
+                       XFS_MOUNT_SMALL_INUMS);
+
+       return maxagi;
 }
 
 xfs_agnumber_t
-- 
1.7.11.4

<Prev in Thread] Current Thread [Next in Thread>