From: "Darrick J. Wong" <djwong@kernel.org>
To: Luca Di Maio <luca.dimaio1@gmail.com>
Cc: linux-xfs@vger.kernel.org, dimitri.ledkov@chainguard.dev,
smoser@chainguard.dev, hch@infradead.org
Subject: Re: [PATCH v8 2/2] mkfs: modify -p flag to populate a filesystem from a directory
Date: Thu, 1 May 2025 15:18:29 -0700 [thread overview]
Message-ID: <20250501221829.GK25675@frogsfrogsfrogs> (raw)
In-Reply-To: <20250501081552.1328703-3-luca.dimaio1@gmail.com>
On Thu, May 01, 2025 at 10:15:52AM +0200, Luca Di Maio wrote:
> right now the `-p` flag only supports a file input.
> this patch will add support to input a directory.
> on directory input, the populate functionality to copy files into
> the root filesystem.
>
> add `atime` flag to popts, that will let the user choose if copy the
> atime timestamps from source directory.
>
> add documentation for new functionalities in man pages.
>
> Signed-off-by: Luca Di Maio <luca.dimaio1@gmail.com>
> ---
> man/man8/mkfs.xfs.8.in | 41 +++++++++++++++++++++++++++++------------
> mkfs/xfs_mkfs.c | 23 +++++++++++++++++++----
> 2 files changed, 48 insertions(+), 16 deletions(-)
>
> diff --git a/man/man8/mkfs.xfs.8.in b/man/man8/mkfs.xfs.8.in
> index 37e3a88e..bb38c148 100644
> --- a/man/man8/mkfs.xfs.8.in
> +++ b/man/man8/mkfs.xfs.8.in
> @@ -28,7 +28,7 @@ mkfs.xfs \- construct an XFS filesystem
> .I naming_options
> ] [
> .B \-p
> -.I protofile_options
> +.I prototype_options
> ] [
> .B \-q
> ] [
> @@ -977,30 +977,39 @@ option set.
> .PP
> .PD 0
> .TP
> -.BI \-p " protofile_options"
> +.BI \-p " prototype_options"
> .TP
> .BI "Section Name: " [proto]
> .PD
> -These options specify the protofile parameters for populating the filesystem.
> +These options specify the prototype parameters for populating the filesystem.
> The valid
> -.I protofile_options
> +.I prototype_options
> are:
> .RS 1.2i
> .TP
> -.BI [file=] protofile
> +.BI [file=]
> The
> .B file=
> prefix is not required for this CLI argument for legacy reasons.
> If specified as a config file directive, the prefix is required.
> -
> +.TP
> +.BI [file=] directory
> If the optional
> .PD
> -.I protofile
> -argument is given,
> +.I prototype
> +argument is given, and it's a directory,
> .B mkfs.xfs
> -uses
> -.I protofile
> -as a prototype file and takes its directions from that file.
> +will populate the root file system with the contents of the given directory.
> +Content, timestamps (atime, mtime), attributes and extended attributes are preserved
> +for all file types.
> +.TP
> +.BI [file=] protofile
> +If the optional
> +.PD
> +.I prototype
> +argument is given, and points to a regular file,
> +.B mkfs.xfs
> +uses it as a prototype file and takes its directions from that file.
This ought to be in the previous patch.
> The blocks and inodes specifiers in the
> .I protofile
> are provided for backwards compatibility, but are otherwise unused.
> @@ -1136,8 +1145,16 @@ always terminated with the dollar (
> .B $
> ) token.
> .TP
> +.BI atime= value
> +If set to 1, when we're populating the root filesystem from a directory (
> +.B file=directory
> +option)
> +access times are going to be preserved and are copied from the source files.
> +Set to 0 to set access times to the current time instead.
> +By default, this is set to 0.
> +.TP
> .BI slashes_are_spaces= value
> -If set to 1, slashes ("/") in the first token of each line of the protofile
> +If set to 1, slashes ("/") in the first token of each line of the prototype file
> are converted to spaces.
> This enables the creation of a filesystem containing filenames with spaces.
> By default, this is set to 0.
> diff --git a/mkfs/xfs_mkfs.c b/mkfs/xfs_mkfs.c
> index 3f4455d4..e4d82d48 100644
> --- a/mkfs/xfs_mkfs.c
> +++ b/mkfs/xfs_mkfs.c
> @@ -121,6 +121,7 @@ enum {
>
> enum {
> P_FILE = 0,
> + P_ATIME,
> P_SLASHES,
> P_MAX_OPTS,
> };
> @@ -709,6 +710,7 @@ static struct opt_params popts = {
> .ini_section = "proto",
> .subopts = {
> [P_FILE] = "file",
> + [P_ATIME] = "atime",
> [P_SLASHES] = "slashes_are_spaces",
> [P_MAX_OPTS] = NULL,
> },
> @@ -717,6 +719,12 @@ static struct opt_params popts = {
> .conflicts = { { NULL, LAST_CONFLICT } },
> .defaultval = SUBOPT_NEEDS_VAL,
> },
> + { .index = P_ATIME,
> + .conflicts = { { NULL, LAST_CONFLICT } },
> + .minval = 0,
> + .maxval = 1,
> + .defaultval = 1,
> + },
> { .index = P_SLASHES,
> .conflicts = { { NULL, LAST_CONFLICT } },
> .minval = 0,
> @@ -1045,6 +1053,7 @@ struct cli_params {
> int lsunit;
> int is_supported;
> int proto_slashes_are_spaces;
> + int proto_atime;
> int data_concurrency;
> int log_concurrency;
> int rtvol_concurrency;
> @@ -1170,6 +1179,7 @@ usage( void )
> /* naming */ [-n size=num,version=2|ci,ftype=0|1,parent=0|1]]\n\
> /* no-op info only */ [-N]\n\
> /* prototype file */ [-p fname]\n\
> +/* populate from directory */ [-p dirname,atime=0|1]\n\
> /* quiet */ [-q]\n\
> /* realtime subvol */ [-r extsize=num,size=num,rtdev=xxx,rgcount=n,rgsize=n,\n\
> concurrency=num]\n\
> @@ -2067,6 +2077,9 @@ proto_opts_parser(
> case P_SLASHES:
> cli->proto_slashes_are_spaces = getnum(value, opts, subopt);
> break;
> + case P_ATIME:
> + cli->proto_atime = getnum(value, opts, subopt);
> + break;
> case P_FILE:
> fallthrough;
> default:
> @@ -5162,7 +5175,7 @@ main(
> int discard = 1;
> int force_overwrite = 0;
> int quiet = 0;
> - char *protostring = NULL;
> + struct xfs_proto_source protosource;
> int worst_freelist = 0;
>
> struct libxfs_init xi = {
> @@ -5311,8 +5324,6 @@ main(
> */
> cfgfile_parse(&cli);
>
> - protostring = setup_proto(cli.protofile);
> -
> /*
> * Extract as much of the valid config as we can from the CLI input
> * before opening the libxfs devices.
> @@ -5480,7 +5491,11 @@ main(
> /*
> * Allocate the root inode and anything else in the proto file.
> */
> - parse_proto(mp, &cli.fsx, &protostring, cli.proto_slashes_are_spaces);
> + protosource = setup_proto(cli.protofile);
Not sure why this is being moved in this patch?
--D
> + parse_proto(mp, &cli.fsx,
> + &protosource,
> + cli.proto_slashes_are_spaces,
> + cli.proto_atime);
>
> /*
> * Protect ourselves against possible stupidity
> --
> 2.49.0
>
prev parent reply other threads:[~2025-05-01 22:18 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-05-01 8:15 [PATCH v8 0/2] mkfs: add ability to populate filesystem from directory Luca Di Maio
2025-05-01 8:15 ` [PATCH v8 1/2] proto: add ability to populate a filesystem from a directory Luca Di Maio
2025-05-01 22:17 ` Darrick J. Wong
2025-05-01 8:15 ` [PATCH v8 2/2] mkfs: modify -p flag " Luca Di Maio
2025-05-01 22:18 ` Darrick J. Wong [this message]
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=20250501221829.GK25675@frogsfrogsfrogs \
--to=djwong@kernel.org \
--cc=dimitri.ledkov@chainguard.dev \
--cc=hch@infradead.org \
--cc=linux-xfs@vger.kernel.org \
--cc=luca.dimaio1@gmail.com \
--cc=smoser@chainguard.dev \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox