All of lore.kernel.org
 help / color / mirror / Atom feed
From: Lukas Herbolt <lukas@herbolt.com>
To: Dave Chinner <dgc@kernel.org>
Cc: djwong@kernel.org, sandeen@sandeen.net, aalbersh@kernel.org,
	linux-xfs@vger.kernel.org
Subject: Re: [RFC PATCH 1/1] xfsprogs: mkfs.xfs add default configuration file.
Date: Mon, 18 May 2026 16:07:02 +0200	[thread overview]
Message-ID: <a798a7f9e94caa7a284e223275faa32e@herbolt.com> (raw)
In-Reply-To: <agZcSv04h0E1Tu0a@dread>

>> +[block]
>> +#size = 4096
> 
> Why do we need a config file that contains all the current defaults
> commented out? We don't do this for the command line conf files we
> ship, so this just seems like unnecessary maintenance overhead to
> me...

That might be unnecessary overhead and we might go just with the
example file placed in /usr/share/

---
# xfs_admin -d /usr/share/xfsprogs/mkfs/lts_6.12.conf
And to reset mkfs behaviour back to built in defaults:
# xfs_admin -d clear
---

>> +
>> +[metadata]
>> +#crc = 1
>> +#finobt = 1
>> +#inobtcount = 1
>> +#rmapbt = 1
>> +#reflink = 1
>> +#bigtime = 1
>> +#metadir = 0
>> +#autofsck = 0
>> +
>> +[inode]
>> +#align = 1
>> +# The default value is 25% for filesystems under 1TB,#5% for 
>> filesystems under
>> +# 50TB and 1% for filesystems over 50TB.
>> +#
>> +#maxpct = 25
>> +#size = 512
>> +#perblock = 8
>> +#attr = 2
>> +#projid32bit = 1
>> +#sparse = 1
>> +#nrext64 = 1
>> +#exchange = 1
>> +
>> +[data]
>> +# -1 = autodetect (use CPU count only on solid-state devices), 0 = 
>> disabled
>> +#concurrency = -1
> 
> Not sure I like this way saying "autotune". This should match the
> existing conf file behaviour to override the default. i.e. 0 turns
> it off, 1 = autodetect, "nr_cpus" = autodetect", any other positive
> value is the minimum concurrency value.
> 
> IMO we should be exactly consistent with the CLI options here so
> that we don't need special parsing code just for the default
> options.
> 
Noted, auto|autodetect is more descriptive than -1.


>> +	if (!cli->cfgfile) {
>> +		/*
>> +		 * No config file specified on the command line. Use the default
>> +		 * system-wide config file if it exists, otherwise do nothing.
>> +		 */
>> +		if (access(MKFS_DEFAULT_CFGFILE, F_OK) != 0)
>> +			return;
>> +		cli->cfgfile = MKFS_DEFAULT_CFGFILE;
>> +	}
> 
> This seems wrong to me. The defaults should always be parsed if the
> default file is present, whilst the CLI conf file should -overlay-
> the defaults like it currently does.
> 
> For example, the system might be set up for on, say 6.12-lts, so
> it's default is lts_6.12.conf. The user then has a custom config
> file for their cloud deployments that need some extra config (e.g.
> turns off rmapbt). i.e. they want all of the 6.12 configs except for
> one.
> 
> Instead of having to craft a config file for all the 6.12 defaults,
> they simple have "rmapbt=0" in a conf file and provide that on the
> CLI. Now they have a mkfs.xfs that defaults to 6.12-lts compatible
> filesystems, and when making their cloud images it simply applies
> a config overlay file via the command line.
> 
> When they upgrade all the systems to, say, 6.19-lts, they don't need
> to rewrite their custom overlay conf file - the system mkfs.xfs now
> defaults to 6.19-lts compatible filesystems, and their overlay conf
> file doesn't need changing. If they still need everything to use
> 6.12 comaptible filesystems, then they change the system default
> conf file, not their cloud-specific conf file.
> 
>> 
>> +	parsing_cfgfile = true;
>>  	error = ini_parse(cli->cfgfile, cfgfile_parse_ini, cli);
>> +	parsing_cfgfile = false;
>>  	if (error) {
>>  		if (error > 0) {
>>  			fprintf(stderr,
> 
> This is not how I envisiaged default config file setup to work for
> mkfs back when I rewrote all the parsing to be able to support
> config files. i.e.
> 
> commit 68344ba0f8cea778919e17958969b6c2459f890a
> Author: Dave Chinner <dchinner@redhat.com>
> Date:   Wed Dec 6 17:14:27 2017 -0600
> 
>     mkfs: introduce default configuration structure
> 
>     mkfs has lots of options that require default values. Some of these
>     are centralised, but others aren't. Introduce a new structure
>     designed to hold default values for all the parameters that need
>     defaults in one place.
> 
>     This structure also provides a mechanism for providing mkfs 
> defaults
>     from a config file. This is not implemented in this series, but a
>     comment is left where it is expected this functionality will hook
>     in.
> 
>     Signed-Off-By: Dave Chinner <dchinner@redhat.com>
>     Reviewed-by: Eric Sandeen <sandeen@redhat.com>
>     Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
> 
> That comment is right at the start of the main() function:
> 
>         /*
>          * TODO: Sourcing defaults from a config file
>          *
>          * Before anything else, see if there's a config file with 
> different
>          * defaults. If a file exists in <package location>, read in 
> the new
>          * default values and overwrite them in the &dft structure. 
> This way the
>          * new defaults will apply before we parse the CLI, and the CLI 
> will
>          * still be able to override them. When more than one source is
>          * implemented, emit a message to indicate where the defaults 
> being
>          * used came from.
>          *
>          * printf(_("Default configuration sourced from %s\n"), 
> dft.source);
>          */
> 
>         /* copy new defaults into CLI parsing structure */
>         memcpy(&cli.sb_feat, &dft.sb_feat, sizeof(cli.sb_feat));
>         memcpy(&cli.fsx, &dft.fsx, sizeof(cli.fsx));
> 
> What the new defaults file code should be doing is parsing the
> defaults file into a new "struct cli_params" structure, then using
> the options parsed from the file to initialise the CLI parsing
> structure. i.e. I had intended the above code to be replaced with
> something like:
> 
> 	struct cli_params file_dfts { ....};
> ....
> 
>         /* Source defaults from a config file if it exists */
> 	file_dfts.config_file = MKFS_DEFAULT_CFGFILE;
>         memcpy(&cli.sb_feat, &file_dfts.sb_feat, sizeof(cli.sb_feat));
>         memcpy(&cli.fsx, &file_dfts.fsx, sizeof(cli.fsx));
> 	cfgfile_parse(&file_dfts);
> 
> 	/* Set up defaults for CLI parsing */
> 	intialise_cli_params(&cli, &file_dfts);
> 
> .....
> 
> and initialise_cli_params() looked something like:
> 
> initialise_cli_params(
> 	*cli,
> 	*default)
> {
>         /* copy feature fields into CLI parsing structure */
>         memcpy(&cli->sb_feat, &default->sb_feat, sizeof(cli->sb_feat));
>         memcpy(&cli->fsx, &default->fsx, sizeof(cli->fsx));
> 
> 	/*
> 	 * Check for parameters we shouldn't set in default conf
> 	 * files. e.g. device specific parameters like sector sizes,
> 	 * sunit/swidth, etc probably shouldn't be set in global
> 	 * default conf files. Warn and clear these parameters.
> 	 */
> 
> 	/*
> 	 * Iterate the parameters found in the default config file
> 	 * and set them as initial values for the CLI parameter
> 	 * parsing. CLI parsing will overwrite these.
> 	 */
> 	<exercise left to the reader>
> }
> 
> Now the CLI and cli conf file parsing should be able to be done
> pretty much as it is currently done. They should override the
> defaults as they currently do, and all existing scripts will behave
> as expected except for mkfs using different system-specified
> defaults.
> 
> -Dave.

Thanks for the example.
I should have read the comments more carefully, so if I get it right
the logic should be: default.file < cli.options < cli.options.file?

Thanks!

-- 
-lhe

  reply	other threads:[~2026-05-18 14:07 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-05-14 14:37 [RFC PATCH 0/1] Add default config file for mkfs.xfs Lukas Herbolt
2026-05-14 14:37 ` [RFC PATCH 1/1] xfsprogs: mkfs.xfs add default configuration file Lukas Herbolt
2026-05-14 15:21   ` Carlos Maiolino
2026-05-14 16:05     ` Eric Sandeen
2026-05-14 16:29       ` Darrick J. Wong
2026-05-14 22:27       ` Dave Chinner
2026-05-20  7:17       ` Lukas Herbolt
2026-05-14 16:27   ` Darrick J. Wong
2026-05-14 23:35   ` Dave Chinner
2026-05-18 14:07     ` Lukas Herbolt [this message]
2026-05-14 15:05 ` [RFC PATCH 0/1] Add default config file for mkfs.xfs Darrick J. Wong

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=a798a7f9e94caa7a284e223275faa32e@herbolt.com \
    --to=lukas@herbolt.com \
    --cc=aalbersh@kernel.org \
    --cc=dgc@kernel.org \
    --cc=djwong@kernel.org \
    --cc=linux-xfs@vger.kernel.org \
    --cc=sandeen@sandeen.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.