]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commitdiff
mkfs: fix the issue of maxpct set to 0 not taking effect
authorliuh <liuhuan01@kylinos.cn>
Fri, 11 Apr 2025 07:12:03 +0000 (15:12 +0800)
committerAndrey Albershteyn <aalbersh@kernel.org>
Mon, 28 Apr 2025 10:57:41 +0000 (12:57 +0200)
If a filesystem has the sb_imax_pct field set to zero, there is no limit to the number of inode blocks in the filesystem.

However, when using mkfs.xfs and specifying maxpct = 0, the result is not as expected.
[root@fs ~]# mkfs.xfs -f -i maxpct=0 xfs.img
data     =               bsize=4096   blocks=262144, imaxpct=25
         =               sunit=0      swidth=0 blks

The reason is that the condition will never succeed when specifying maxpct = 0. As a result, the default algorithm was applied.
cfg->imaxpct = cli->imaxpct;
if (cfg->imaxpct)
return;

The result with patch:
[root@fs ~]# mkfs.xfs -f -i maxpct=0 xfs.img
data     =               bsize=4096   blocks=262144, imaxpct=0
         =               sunit=0      swidth=0 blks

[root@fs ~]# mkfs.xfs -f xfs.img
data     =               bsize=4096   blocks=262144, imaxpct=25
         =               sunit=0      swidth=0 blks

Cc: linux-xfs@vger.kernel.org # v4.15.0
Fixes: d7240c965389e1 ("mkfs: rework imaxpct calculation")
Suggested-by: Darrick J. Wong <djwong@kernel.org>
Signed-off-by: liuh <liuhuan01@kylinos.cn>
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
mkfs/xfs_mkfs.c

index 3f4455d4638315d233d50ff1bcda19b85dc23d15..25bed4eb180b3bb7d0801e6f1971313928c5f366 100644 (file)
@@ -1048,13 +1048,13 @@ struct cli_params {
        int     data_concurrency;
        int     log_concurrency;
        int     rtvol_concurrency;
+       int     imaxpct;
 
        /* parameters where 0 is not a valid value */
        int64_t agcount;
        int64_t rgcount;
        int     inodesize;
        int     inopblock;
-       int     imaxpct;
        int     lsectorsize;
        uuid_t  uuid;
 
@@ -4048,9 +4048,10 @@ calculate_imaxpct(
        struct mkfs_params      *cfg,
        struct cli_params       *cli)
 {
-       cfg->imaxpct = cli->imaxpct;
-       if (cfg->imaxpct)
+       if (cli->imaxpct >= 0) {
+               cfg->imaxpct = cli->imaxpct;
                return;
+       }
 
        /*
         * This returns the % of the disk space that is used for
@@ -5181,6 +5182,7 @@ main(
                .log_concurrency = -1, /* auto detect non-mechanical ddev */
                .rtvol_concurrency = -1, /* auto detect non-mechanical rtdev */
                .autofsck = FSPROP_AUTOFSCK_UNSET,
+               .imaxpct = -1, /* set sb_imax_pct automatically */
        };
        struct mkfs_params      cfg = {};