From: Gao Xiang <hsiangkao@linux.alibaba.com>
To: Aleksa Sarai <cyphar@cyphar.com>,
Giuseppe Scrivano <gscrivan@redhat.com>
Cc: linux-erofs@lists.ozlabs.org, linux-fsdevel@vger.kernel.org,
Christian Brauner <brauner@kernel.org>
Subject: Re: [PATCH v2] erofs: accept source file descriptor via fsconfig
Date: Mon, 13 Jul 2026 13:45:26 +0800 [thread overview]
Message-ID: <8829ed0e-5ebc-4832-b9bf-9efdfeb128c7@linux.alibaba.com> (raw)
In-Reply-To: <2026-07-13-dandy-better-exposure-wager-9hBmfv@cyphar.com>
Hi Aleksa,
On 2026/7/13 12:52, Aleksa Sarai wrote:
> On 2026-07-11, Giuseppe Scrivano <gscrivan@redhat.com> wrote:
>> diff --git a/fs/erofs/super.c b/fs/erofs/super.c
>> index 86fa5c6a0c70..3040d4cf9b85 100644
>> --- a/fs/erofs/super.c
>> +++ b/fs/erofs/super.c
>> @@ -386,6 +386,7 @@ static void erofs_default_options(struct erofs_sb_info *sbi)
>> enum {
>> Opt_user_xattr, Opt_acl, Opt_cache_strategy, Opt_dax, Opt_dax_enum,
>> Opt_device, Opt_domain_id, Opt_directio, Opt_fsoffset, Opt_inode_share,
>> + Opt_source_fd,
>> };
>>
>> static const struct constant_table erofs_param_cache_strategy[] = {
>> @@ -413,6 +414,7 @@ static const struct fs_parameter_spec erofs_fs_parameters[] = {
>> fsparam_flag_no("directio", Opt_directio),
>> fsparam_u64("fsoffset", Opt_fsoffset),
>> fsparam_flag("inode_share", Opt_inode_share),
>> + fsparam_fd("source", Opt_source_fd),
>> {}
>> };
>>
>> @@ -524,6 +526,11 @@ static int erofs_fc_parse_param(struct fs_context *fc,
>> else
>> set_opt(&sbi->opt, INODE_SHARE);
>> break;
>> + case Opt_source_fd:
>> + if (sbi->dif0.file)
>> + return -EINVAL;
>> + sbi->dif0.file = get_file(param->file);
>> + break;
>
> I don't think this handling is right for a few reasons:
>
> 1. AFAICS this shadows the default "source" handling logic (because
> -ENOPARAM is not returned for the non-fd case), which means that
> this regresses existing erofs users -- everyone already uses
> "source" today. I must really be missing something if this worked
> when you tested it.
>
> Additionally, fsparam_fd unfortunately permits strings (where the
> string is the numerical value of the fd number), meaning that this
> will call get_file(<garbage>) if someone uses FSCONFIG_SET_STRING.
> You will need to check param->type at least to avoid that.
>
> I meant to send a patch for this earlier this year, but a nicer
> solution would be to have a custom helper similar to fs_lookup_param
> except that it permits FSCONFIG_SET_FD, FSCONFIG_SET_PATH,
> FSCONFIG_SET_PATH_EMPTY, and FSCONFIG_SET_STRING. This is sorely
> missing and people keep accidentally creating unusable interfaces as
> a result. I mentioned this in an LPC talk last year[1].
>
> proc_parse_pidns_param was my minimal version that only accepts
> FSCONFIG_SET_FD and FSCONFIG_SET_STRING, and if you don't want to
> add dirfd support yet then you should use something more like that.
Yes, I tried this patch just now, it seems it regresses the default
"source" as you said. I have to withdraw my rvb.
Just check the codebase, it seems at least the minimal change is that
it needs a way for the default "source" to fall back to
vfs_parse_fs_param_source().
My initial rough thought for source_fd support for a filesystem was
not simple as this too, but I never tried to seek time to implement
myself according to my priority list. As you said, I think in order
to better parse both source or source_fd cases, it should be better
to have better vfs helpers to parse both cases in a clean way;
I think then that should also enable bdev-backed source fds [1].
>
> 2. On a slightly less critical note, fc->source has special handling in
> the VFS in a few places and AFAICS this is the first example of
> someone adding an implementation of "source" that does not set
> fc->source to a proper value, which deserves some additional review.
>
> (At at quick glance it seems this just means that some stuff in
> procfs will show as "none" rather than fc->source debugging, but
> again it probably needs a closer look.)
Yes, "none" is useless for source fd cases, it'd be better to have
a path instead.
[1] https://github.com/composefs/composefs-rs/issues/346#issuecomment-4903974902
Thanks,
Gao Xiang
>
> [1]: https://youtu.be/NX5IzF6JXp0?t=72
>
next prev parent reply other threads:[~2026-07-13 5:45 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-11 7:10 [PATCH v2] erofs: accept source file descriptor via fsconfig Giuseppe Scrivano
2026-07-13 3:57 ` Gao Xiang
2026-07-13 4:52 ` Aleksa Sarai
2026-07-13 5:45 ` Gao Xiang [this message]
2026-07-13 8:06 ` Giuseppe Scrivano
2026-07-13 8:33 ` Aleksa Sarai
2026-07-13 10:24 ` Giuseppe Scrivano
2026-07-14 0:49 ` Aleksa Sarai
2026-07-14 1:56 ` Gao Xiang
2026-07-14 6:36 ` Giuseppe Scrivano
2026-07-14 6:45 ` Gao Xiang
2026-07-14 10:09 ` Giuseppe Scrivano
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=8829ed0e-5ebc-4832-b9bf-9efdfeb128c7@linux.alibaba.com \
--to=hsiangkao@linux.alibaba.com \
--cc=brauner@kernel.org \
--cc=cyphar@cyphar.com \
--cc=gscrivan@redhat.com \
--cc=linux-erofs@lists.ozlabs.org \
--cc=linux-fsdevel@vger.kernel.org \
/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