From: liuh Date: Fri, 11 Apr 2025 07:12:03 +0000 (+0800) Subject: mkfs: fix the issue of maxpct set to 0 not taking effect X-Git-Tag: v6.15.0~45 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=81f646b0d6afb797fdd14eccc9965a3212ba358e;p=thirdparty%2Fxfsprogs-dev.git mkfs: fix the issue of maxpct set to 0 not taking effect 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 Signed-off-by: liuh Reviewed-by: Darrick J. Wong --- diff --git a/mkfs/xfs_mkfs.c b/mkfs/xfs_mkfs.c index 3f4455d4..25bed4eb 100644 --- a/mkfs/xfs_mkfs.c +++ b/mkfs/xfs_mkfs.c @@ -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 = {};