Whamcloud - gitweb
ext2fs: make sure we have at least EXT2_FIRST_INO + 1 inodes
authorLi Dongyang <dongyangli@ddn.com>
Thu, 20 Jul 2023 12:50:12 +0000 (22:50 +1000)
committerTheodore Ts'o <tytso@mit.edu>
Thu, 8 Feb 2024 15:51:46 +0000 (10:51 -0500)
When creating a small fs with 100 1k blocks, mke2fs fails with:

Creating filesystem with 100 1k blocks and 8 inodes

Allocating group tables: done
Writing inode tables: done
ext2fs_mkdir: Could not allocate inode in ext2 filesystem while creating /lost+found

Increase s_inodes_per_group with a step of 8 to make
sure we have at least EXT2_FIRST_INO + 1 inodes.

Change-Id: Ib885735641dfa0ed9c6f6a4a1f9afec291673126
Signed-off-by: Li Dongyang <dongyangli@ddn.com>
Reviewed-by: Andreas Dilger <adilger@dilger.ca>
Link: https://lore.kernel.org/r/20230720125012.641504-1-dongyangli@ddn.com
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
lib/ext2fs/initialize.c

index edd692b..e96f3ca 100644 (file)
@@ -308,13 +308,6 @@ retry:
                set_field(s_inodes_count, ext2fs_blocks_count(super) / i);
 
        /*
-        * Make sure we have at least EXT2_FIRST_INO + 1 inodes, so
-        * that we have enough inodes for the filesystem(!)
-        */
-       if (super->s_inodes_count < EXT2_FIRST_INODE(super)+1)
-               super->s_inodes_count = EXT2_FIRST_INODE(super)+1;
-
-       /*
         * There should be at least as many inodes as the user
         * requested.  Figure out how many inodes per group that
         * should be.  But make sure that we don't allocate more than
@@ -375,6 +368,15 @@ ipg_retry:
        }
        super->s_inodes_count = super->s_inodes_per_group *
                fs->group_desc_count;
+       /*
+        * Make sure we have at least EXT2_FIRST_INO + 1 inodes, so
+        * that we have enough inodes for the filesystem(!)
+        */
+       if (super->s_inodes_count < EXT2_FIRST_INODE(super)+1) {
+               ipg += 8;
+               goto ipg_retry;
+       }
+
        super->s_free_inodes_count = super->s_inodes_count;
 
        /*