]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commitdiff
mkfs: rework imaxpct calculation
authorDave Chinner <dchinner@redhat.com>
Wed, 6 Dec 2017 23:14:27 +0000 (17:14 -0600)
committerEric Sandeen <sandeen@redhat.com>
Wed, 6 Dec 2017 23:14:27 +0000 (17:14 -0600)
Signed-Off-By: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Eric Sandeen <sandeen@redhat.com>
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
mkfs/xfs_mkfs.c

index 11f08869bd112ac09a3e3c6ac2477808b0495e9b..0e3169f3095b54304b544044fb07ea82e77355d0 100644 (file)
@@ -1066,28 +1066,6 @@ validate_log_size(uint64_t logblocks, int blocklog, int min_logblocks)
        }
 }
 
-static int
-calc_default_imaxpct(
-       int             blocklog,
-       uint64_t        dblocks)
-{
-       /*
-        * This returns the % of the disk space that is used for
-        * inodes, it changes relatively to the FS size:
-        *  - over  50 TB, use 1%,
-        *  - 1TB - 50 TB, use 5%,
-        *  - under  1 TB, use XFS_DFL_IMAXIMUM_PCT (25%).
-        */
-
-       if (dblocks < TERABYTES(1, blocklog)) {
-               return XFS_DFL_IMAXIMUM_PCT;
-       } else if (dblocks < TERABYTES(50, blocklog)) {
-               return 5;
-       }
-
-       return 1;
-}
-
 static void
 validate_ag_geometry(
        int             blocklog,
@@ -2890,6 +2868,31 @@ validate:
                             cfg->agsize, cfg->agcount);
 }
 
+static void
+calculate_imaxpct(
+       struct mkfs_params      *cfg,
+       struct cli_params       *cli)
+{
+       cfg->imaxpct = cli->imaxpct;
+       if (cfg->imaxpct)
+               return;
+
+       /*
+        * This returns the % of the disk space that is used for
+        * inodes, it changes relatively to the FS size:
+        *  - over  50 TB, use 1%,
+        *  - 1TB - 50 TB, use 5%,
+        *  - under  1 TB, use XFS_DFL_IMAXIMUM_PCT (25%).
+        */
+
+       if (cfg->dblocks < TERABYTES(1, cfg->blocklog))
+               cfg->imaxpct = XFS_DFL_IMAXIMUM_PCT;
+       else if (cfg->dblocks < TERABYTES(50, cfg->blocklog))
+               cfg->imaxpct = 5;
+       else
+               cfg->imaxpct = 1;
+}
+
 static void
 print_mkfs_cfg(
        struct mkfs_params      *cfg,
@@ -3536,7 +3539,6 @@ main(
        int                     force_overwrite;
        struct fsxattr          fsx;
        int                     imaxpct;
-       int                     imflag;
        int                     inodelog;
        int                     inopblock;
        int                     isize;
@@ -3632,7 +3634,6 @@ main(
        cli.loginternal = 1;    /* internal by default */
 
        agsize = dblocks = 0;
-       imflag = 0;
        laflag = lsflag = 0;
        loginternal = 1;
        logagno = logblocks = rtblocks = rtextblocks = 0;
@@ -3655,6 +3656,7 @@ main(
                        force_overwrite = 1;
                        break;
                case 'b':
+               case 'i':
                case 'n':
                case 'r':
                case 's':
@@ -3669,14 +3671,6 @@ main(
                        fsx.fsx_extsize = cli.fsx.fsx_extsize;
                        /* end temp don't break code */
                        break;
-               case 'i':
-                       parse_subopts(c, optarg, &cli);
-
-                       /* temp don't break code */
-                       imaxpct = cli.imaxpct;
-                       imflag = cli_opt_set(&iopts, I_MAXPCT);
-                       /* end temp don't break code */
-                       break;
                case 'l':
                        parse_subopts(c, optarg, &cli);
 
@@ -3777,6 +3771,8 @@ main(
        calculate_initial_ag_geometry(&cfg, &cli);
        align_ag_geometry(&cfg);
 
+       calculate_imaxpct(&cfg, &cli);
+
        /* temp don't break code */
        sectorsize = cfg.sectorsize;
        sectorlog = cfg.sectorlog;
@@ -3802,12 +3798,9 @@ main(
        lsunit = cfg.lsunit;
        agsize = cfg.agsize;
        agcount = cfg.agcount;
+       imaxpct = cfg.imaxpct;
        /* end temp don't break code */
 
-
-       if (!imflag)
-               imaxpct = calc_default_imaxpct(blocklog, dblocks);
-
        min_logblocks = max_trans_res(agsize,
                                   sb_feat.crcs_enabled, sb_feat.dir_version,
                                   sectorlog, blocklog, inodelog, dirblocklog,