From: Amir Goldstein <amir73il@gmail.com>
To: "André Almeida" <andrealmeid@igalia.com>
Cc: Miklos Szeredi <miklos@szeredi.hu>, Theodore Tso <tytso@mit.edu>,
Gabriel Krisman Bertazi <krisman@kernel.org>,
linux-unionfs@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-fsdevel@vger.kernel.org,
Alexander Viro <viro@zeniv.linux.org.uk>,
Christian Brauner <brauner@kernel.org>, Jan Kara <jack@suse.cz>,
kernel-dev@igalia.com
Subject: Re: [PATCH v4 1/9] ovl: Support mounting case-insensitive enabled filesystems
Date: Thu, 14 Aug 2025 10:35:50 +0200 [thread overview]
Message-ID: <CAOQ4uxiENaCd7RcAS8j+UUNmtmOzKZ3BwBWst=fKN6zWLZyvuQ@mail.gmail.com> (raw)
In-Reply-To: <20250813-tonyk-overlayfs-v4-1-357ccf2e12ad@igalia.com>
Hi Andre,
As a methodology in patch series, although they are often merged together
we want to abide by the concept of bisectability of the series, so it is not
good practice to "Support mounting case-insensitive enabled filesystems"
before this support is fully implemented.
Suggest to change the title of this patch to:
"ovl: Prepare for mounting case-insensitive enabled filesystems"
which implements the logic of enforcing "uniform casefolded layers"
but do not change ovl_dentry_weird() yet - do that in patch 9, so that
both lookup and mount of casefolded dirs are allowed together.
commit message need to be changed of course.
On Thu, Aug 14, 2025 at 12:37 AM André Almeida <andrealmeid@igalia.com> wrote:
>
> Enable mounting filesystems with case-insensitive dentries in order to
> support such filesystems in overlayfs.
>
> Signed-off-by: André Almeida <andrealmeid@igalia.com>
> ---
> Changes from v3:
> - Move this patch to be ealier in the series
> - Split this patch with the ovl_lookup_single() restriction patch
> ---
> fs/overlayfs/ovl_entry.h | 1 +
> fs/overlayfs/params.c | 15 ++++++++++++---
> fs/overlayfs/params.h | 1 +
> fs/overlayfs/util.c | 8 ++++----
> 4 files changed, 18 insertions(+), 7 deletions(-)
>
> diff --git a/fs/overlayfs/ovl_entry.h b/fs/overlayfs/ovl_entry.h
> index 4c1bae935ced274f93a0d23fe10d34455e226ec4..1d4828dbcf7ac4ba9657221e601bbf79d970d225 100644
> --- a/fs/overlayfs/ovl_entry.h
> +++ b/fs/overlayfs/ovl_entry.h
> @@ -91,6 +91,7 @@ struct ovl_fs {
> struct mutex whiteout_lock;
> /* r/o snapshot of upperdir sb's only taken on volatile mounts */
> errseq_t errseq;
> + bool casefold;
> };
>
> /* Number of lower layers, not including data-only layers */
> diff --git a/fs/overlayfs/params.c b/fs/overlayfs/params.c
> index f4e7fff909ac49e2f8c58a76273426c1158a7472..17d2354ba88d92e1d9653e8cb1382d860a7329c5 100644
> --- a/fs/overlayfs/params.c
> +++ b/fs/overlayfs/params.c
> @@ -277,16 +277,25 @@ static int ovl_mount_dir_check(struct fs_context *fc, const struct path *path,
> enum ovl_opt layer, const char *name, bool upper)
> {
> struct ovl_fs_context *ctx = fc->fs_private;
> + struct ovl_fs *ofs = fc->s_fs_info;
> + bool is_casefolded = ovl_dentry_casefolded(path->dentry);
>
> if (!d_is_dir(path->dentry))
> return invalfc(fc, "%s is not a directory", name);
>
> /*
> * Allow filesystems that are case-folding capable but deny composing
> - * ovl stack from case-folded directories.
> + * ovl stack from inconsistent case-folded directories.
> */
> - if (ovl_dentry_casefolded(path->dentry))
> - return invalfc(fc, "case-insensitive directory on %s not supported", name);
> + if (!ctx->casefold_set) {
> + ofs->casefold = is_casefolded;
> + ctx->casefold_set = true;
> + }
> +
> + if (ofs->casefold != is_casefolded) {
> + return invalfc(fc, "case-%ssensitive directory on %s is inconsistent",
> + is_casefolded ? "in" : "", name);
> + }
>
> if (ovl_dentry_weird(path->dentry))
> return invalfc(fc, "filesystem on %s not supported", name);
> diff --git a/fs/overlayfs/params.h b/fs/overlayfs/params.h
> index c96d939820211ddc63e265670a2aff60d95eec49..ffd53cdd84827cce827e8852f2de545f966ce60d 100644
> --- a/fs/overlayfs/params.h
> +++ b/fs/overlayfs/params.h
> @@ -33,6 +33,7 @@ struct ovl_fs_context {
> struct ovl_opt_set set;
> struct ovl_fs_context_layer *lower;
> char *lowerdir_all; /* user provided lowerdir string */
> + bool casefold_set;
> };
>
> int ovl_init_fs_context(struct fs_context *fc);
> diff --git a/fs/overlayfs/util.c b/fs/overlayfs/util.c
> index a33115e7384c129c543746326642813add63f060..7a6ee058568283453350153c1720c35e11ad4d1b 100644
> --- a/fs/overlayfs/util.c
> +++ b/fs/overlayfs/util.c
> @@ -210,11 +210,11 @@ bool ovl_dentry_weird(struct dentry *dentry)
> return true;
>
> /*
> - * Allow filesystems that are case-folding capable but deny composing
> - * ovl stack from case-folded directories.
> + * Exceptionally for casefold dentries, we accept that they have their
> + * own hash and compare operations
> */
> - if (sb_has_encoding(dentry->d_sb))
> - return IS_CASEFOLDED(d_inode(dentry));
> + if (ovl_dentry_casefolded(dentry))
> + return false;
>
> return dentry->d_flags & (DCACHE_OP_HASH | DCACHE_OP_COMPARE);
> }
Move relaxing of ovl_dentry_weird() to patch 9 please.
Thanks,
Amir.
next prev parent reply other threads:[~2025-08-14 8:36 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-08-13 22:36 [PATCH v4 0/9] ovl: Enable support for casefold filesystems André Almeida
2025-08-13 22:36 ` [PATCH v4 1/9] ovl: Support mounting case-insensitive enabled filesystems André Almeida
2025-08-14 8:35 ` Amir Goldstein [this message]
2025-08-13 22:36 ` [PATCH v4 2/9] fs: Create new helper sb_encoding() André Almeida
2025-08-14 12:18 ` Amir Goldstein
2025-08-13 22:36 ` [PATCH v4 3/9] ovl: Create ovl_casefold() to support casefolded strncmp() André Almeida
2025-08-14 12:53 ` Amir Goldstein
2025-08-14 13:02 ` André Almeida
2025-08-14 13:20 ` Amir Goldstein
2025-08-13 22:36 ` [PATCH v4 4/9] fs: Create sb_same_encoding() helper André Almeida
2025-08-14 12:19 ` Amir Goldstein
2025-08-13 22:36 ` [PATCH v4 5/9] ovl: Ensure that all layers have the same encoding André Almeida
2025-08-14 12:56 ` Amir Goldstein
2025-08-13 22:36 ` [PATCH v4 6/9] ovl: Set case-insensitive dentry operations for ovl sb André Almeida
2025-08-14 12:57 ` Amir Goldstein
2025-08-13 22:36 ` [PATCH v4 7/9] ovl: Add S_CASEFOLD as part of the inode flag to be copied André Almeida
2025-08-14 13:00 ` Amir Goldstein
2025-08-13 22:36 ` [PATCH v4 8/9] ovl: Check for casefold consistency when creating new dentries André Almeida
2025-08-14 13:06 ` Amir Goldstein
2025-08-13 22:36 ` [PATCH v4 9/9] ovl: Allow case-insensitive lookup André Almeida
2025-08-14 8:44 ` Amir Goldstein
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='CAOQ4uxiENaCd7RcAS8j+UUNmtmOzKZ3BwBWst=fKN6zWLZyvuQ@mail.gmail.com' \
--to=amir73il@gmail.com \
--cc=andrealmeid@igalia.com \
--cc=brauner@kernel.org \
--cc=jack@suse.cz \
--cc=kernel-dev@igalia.com \
--cc=krisman@kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-unionfs@vger.kernel.org \
--cc=miklos@szeredi.hu \
--cc=tytso@mit.edu \
--cc=viro@zeniv.linux.org.uk \
/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;
as well as URLs for NNTP newsgroup(s).