[PATCH v2] mkfs: fix the issue of maxpct set to 0 not taking effect

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



From: liuh <liuhuan01@xxxxxxxxxx>

It does not take effect when maxpct is specified as 0.

Firstly, the man mkfs.xfs shows that setting maxpct to 0 means that all of the filesystem can become inode blocks.
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 judging condition will never succeed when specifying maxpct = 0. As a result, the default algorithm was applied.
    cfg->imaxpct = cli->imaxpct;
    if (cfg->imaxpct)
        return;
It's important that maxpct can be set to 0 within the kernel xfs code.

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

Signed-off-by: liuh <liuhuan01@xxxxxxxxxx>
---
 mkfs/xfs_mkfs.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/mkfs/xfs_mkfs.c b/mkfs/xfs_mkfs.c
index 956cc295..f4216000 100644
--- a/mkfs/xfs_mkfs.c
+++ b/mkfs/xfs_mkfs.c
@@ -1034,13 +1034,13 @@ struct cli_params {
 	int	proto_slashes_are_spaces;
 	int	data_concurrency;
 	int	log_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;
 
@@ -3834,9 +3834,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
@@ -4891,6 +4892,7 @@ main(
 		.data_concurrency = -1, /* auto detect non-mechanical storage */
 		.log_concurrency = -1, /* auto detect non-mechanical ddev */
 		.autofsck = FSPROP_AUTOFSCK_UNSET,
+		.imaxpct = -1,
 	};
 	struct mkfs_params	cfg = {};
 
-- 
2.43.0





[Index of Archives]     [XFS Filesystem Development (older mail)]     [Linux Filesystem Development]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux RAID]     [Linux SCSI]


  Powered by Linux