cfg->dirblocksize = 1 << cfg->dirblocklog;
}
+static void
+validate_inodesize(
+ struct mkfs_params *cfg,
+ struct cli_params *cli)
+{
+
+ if (cli->inopblock)
+ cfg->inodelog = cfg->blocklog - libxfs_highbit32(cli->inopblock);
+ else if (cli->inodesize)
+ cfg->inodelog = libxfs_highbit32(cli->inodesize);
+ else if (cfg->sb_feat.crcs_enabled)
+ cfg->inodelog = XFS_DINODE_DFL_CRC_LOG;
+ else
+ cfg->inodelog = XFS_DINODE_DFL_LOG;
+
+ cfg->inodesize = 1 << cfg->inodelog;
+ cfg->inopblock = cfg->blocksize / cfg->inodesize;
+
+ /* input parsing has already validated non-crc inode size range */
+ if (cfg->sb_feat.crcs_enabled &&
+ cfg->inodelog < XFS_DINODE_DFL_CRC_LOG) {
+ fprintf(stderr,
+ _("Minimum inode size for CRCs is %d bytes\n"),
+ 1 << XFS_DINODE_DFL_CRC_LOG);
+ usage();
+ }
+
+ if (cfg->inodesize > cfg->blocksize / XFS_MIN_INODE_PERBLOCK ||
+ cfg->inopblock < XFS_MIN_INODE_PERBLOCK ||
+ cfg->inodesize < XFS_DINODE_MIN_SIZE ||
+ cfg->inodesize > XFS_DINODE_MAX_SIZE) {
+ int maxsz;
+
+ fprintf(stderr, _("illegal inode size %d\n"), cfg->inodesize);
+ maxsz = MIN(cfg->blocksize / XFS_MIN_INODE_PERBLOCK,
+ XFS_DINODE_MAX_SIZE);
+ if (XFS_DINODE_MIN_SIZE == maxsz)
+ fprintf(stderr,
+ _("allowable inode size with %d byte blocks is %d\n"),
+ cfg->blocksize, XFS_DINODE_MIN_SIZE);
+ else
+ fprintf(stderr,
+ _("allowable inode size with %d byte blocks is between %d and %d\n"),
+ cfg->blocksize, XFS_DINODE_MIN_SIZE, maxsz);
+ exit(1);
+ }
+}
+
static void
print_mkfs_cfg(
struct mkfs_params *cfg,
int dsflag;
int force_overwrite;
struct fsxattr fsx;
- int ilflag;
int imaxpct;
int imflag;
int inodelog;
int inopblock;
- int ipflag;
- int isflag;
int isize;
char *label = NULL;
int laflag;
cli.loginternal = 1; /* internal by default */
agsize = daflag = dasize = dblocks = 0;
- ilflag = imflag = ipflag = isflag = 0;
+ imflag = 0;
liflag = laflag = lsflag = lsuflag = lsunitflag = ldflag = lvflag = 0;
loginternal = 1;
logagno = logblocks = rtblocks = rtextblocks = 0;
parse_subopts(c, optarg, &cli);
/* temp don't break code */
- isize = cli.inodesize;
- inodelog = libxfs_highbit32(isize);
- inopblock = cli.inopblock;
- ilflag = cli_opt_set(&iopts, I_LOG);
- isflag = cli_opt_set(&iopts, I_SIZE);
- ipflag = cli_opt_set(&iopts, I_PERBLOCK);
-
imaxpct = cli.imaxpct;
imflag = cli_opt_set(&iopts, I_MAXPCT);
/* end temp don't break code */
* the cfg structure for them, not the command line structure.
*/
validate_dirblocksize(&cfg, &cli);
+ validate_inodesize(&cfg, &cli);
/* temp don't break code */
sectorsize = cfg.sectorsize;
sb_feat = cfg.sb_feat;
dirblocksize = cfg.dirblocksize;
dirblocklog = cfg.dirblocklog;
+ isize = cfg.inodesize;
+ inodelog = cfg.inodelog;
+ inopblock = cfg.inopblock;
/* end temp don't break code */
if (dsize) {
(long long)dbytes, blocksize,
(long long)(dblocks << blocklog));
}
- if (ipflag) {
- inodelog = blocklog - libxfs_highbit32(inopblock);
- isize = 1 << inodelog;
- } else if (!ilflag && !isflag) {
- inodelog = sb_feat.crcs_enabled ? XFS_DINODE_DFL_CRC_LOG
- : XFS_DINODE_DFL_LOG;
- isize = 1 << inodelog;
- }
- if (sb_feat.crcs_enabled && inodelog < XFS_DINODE_DFL_CRC_LOG) {
- fprintf(stderr,
- _("Minimum inode size for CRCs is %d bytes\n"),
- 1 << XFS_DINODE_DFL_CRC_LOG);
- usage();
- }
-
if (logsize) {
uint64_t logbytes;
}
ASSERT(rtextblocks);
- /*
- * Check some argument sizes against mins, maxes.
- */
- if (isize > blocksize / XFS_MIN_INODE_PERBLOCK ||
- isize < XFS_DINODE_MIN_SIZE ||
- isize > XFS_DINODE_MAX_SIZE) {
- int maxsz;
-
- fprintf(stderr, _("illegal inode size %d\n"), isize);
- maxsz = MIN(blocksize / XFS_MIN_INODE_PERBLOCK,
- XFS_DINODE_MAX_SIZE);
- if (XFS_DINODE_MIN_SIZE == maxsz)
- fprintf(stderr,
- _("allowable inode size with %d byte blocks is %d\n"),
- blocksize, XFS_DINODE_MIN_SIZE);
- else
- fprintf(stderr,
- _("allowable inode size with %d byte blocks is between %d and %d\n"),
- blocksize, XFS_DINODE_MIN_SIZE, maxsz);
- exit(1);
- }
-
calc_stripe_factors(dsu, dsw, sectorsize, lsu, lsectorsize,
&dsunit, &dswidth, &lsunit);