From nobody Sun Oct 5 10:47:26 2025 Received: from fanzine2.igalia.com (fanzine2.igalia.com [213.97.179.56]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id F3C131FF60A; Tue, 5 Aug 2025 03:48:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.97.179.56 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754365720; cv=none; b=hTQXLEe/NUKyCp/nbwbwSUp7WVuR455hgsMwRoNU82+8PgLPSqLTgUTd7X8QkT1ieKQMW3vnbor2Euquwh0RHrbCiwFPBfq+k8G9BI7fVFxkQTViwlIXTG5GwVnN+89/cKEiIe01xb/ekY6Nz5l5EGvcwe5rbRfKxVKM33aVoJw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754365720; c=relaxed/simple; bh=FPtU/Ai5R8Lg4jJU5bAB80XGoKwS7ujyhiZIPUUWmik=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=BLzqQceyKB2JJVNJ4b3+Hw+GvpNAWTH6tC94w+XuROWzw56Qbd2AFy7bbjX+TpM3y8i8uq8TYHeZhNPA3LBhD7EEmR5yF3Bp6G9z9nITKMWUfo6JxTMdWJSYGDuae70NVE5v2watH/7FLs4NwHT8dTeG/o1S+XeWPlNXm9zXU7c= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=igalia.com; spf=pass smtp.mailfrom=igalia.com; dkim=pass (2048-bit key) header.d=igalia.com header.i=@igalia.com header.b=k1CvXzcu; arc=none smtp.client-ip=213.97.179.56 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=igalia.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=igalia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=igalia.com header.i=@igalia.com header.b="k1CvXzcu" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=igalia.com; s=20170329; h=Cc:To:In-Reply-To:References:Message-Id: Content-Transfer-Encoding:Content-Type:MIME-Version:Subject:Date:From:Sender: Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender :Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=u5dqYFffPUWN7EHk6iUKXgaTVbZf4mOJ/Ftz9RBn1Fo=; b=k1CvXzcuULqwgn8QJB4+m1B7Qb 16+nV4+tpLB5TekWVhB2GcQ84hyeRCnJDvBog+434Jfjm3afgDVM4FJCtG4qnr/CGg7rnXOVC+lrY 60LOeE2Ceh7Y1UqM2DtFBeNwISE1vubx7xh6CMDI6ZO8y+IdchhNGNHtP63f6jds6ceMLOohsHZa3 I80o39eUq4AHt7S9O1Ncb2OJr1VPK6bqrt7Pc2XmCrUEK8iWwSFWAN7i6mOJZ37+EvfLlm9KQCVJx kIkxLOlxCLaQz3eKQyoEExDidt4eJ/chYQ+Wk8x0jPZxGNkzhT05y7cyCAmVspvwJbm2V33NF7gr0 +ClwB0+w==; Received: from [191.204.199.202] (helo=[192.168.15.100]) by fanzine2.igalia.com with esmtpsa (Cipher TLS1.3:ECDHE_X25519__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim) id 1uj83B-009TiJ-83; Tue, 05 Aug 2025 05:09:17 +0200 From: =?utf-8?q?Andr=C3=A9_Almeida?= Date: Tue, 05 Aug 2025 00:09:05 -0300 Subject: [PATCH RFC v2 1/8] olv: Store casefold name for case-insentive dentries Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250805-tonyk-overlayfs-v2-1-0e54281da318@igalia.com> References: <20250805-tonyk-overlayfs-v2-0-0e54281da318@igalia.com> In-Reply-To: <20250805-tonyk-overlayfs-v2-0-0e54281da318@igalia.com> To: Miklos Szeredi , Amir Goldstein , Theodore Tso , Gabriel Krisman Bertazi Cc: linux-unionfs@vger.kernel.org, linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, Alexander Viro , Christian Brauner , Jan Kara , kernel-dev@igalia.com, =?utf-8?q?Andr=C3=A9_Almeida?= X-Mailer: b4 0.14.2 In order to make case-insentive mounting points work, overlayfs needs the casefolded version of its dentries so the search and insertion in the struct ovl_readdir_data's red-black compares the dentry names in a case-insentive fashion. If a dentry is casefolded, compute and store it's casefolded name and it's Unicode map. If utf8_casefold() fails, set it's name pointer as NULL so it can be ignored and fallback to the original name. Signed-off-by: Andr=C3=A9 Almeida --- fs/overlayfs/readdir.c | 40 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/fs/overlayfs/readdir.c b/fs/overlayfs/readdir.c index b65cdfce31ce27172d28d879559f1008b9c87320..83bca1bcb0488461b08effa70b3= 2ff2fefba134e 100644 --- a/fs/overlayfs/readdir.c +++ b/fs/overlayfs/readdir.c @@ -16,6 +16,8 @@ #include #include "overlayfs.h" =20 +#define OVL_NAME_LEN 255 + struct ovl_cache_entry { unsigned int len; unsigned int type; @@ -27,6 +29,9 @@ struct ovl_cache_entry { bool is_upper; bool is_whiteout; bool check_xwhiteout; + struct unicode_map *map; + char *cf_name; + int cf_len; char name[]; }; =20 @@ -50,6 +55,7 @@ struct ovl_readdir_data { bool is_upper; bool d_type_supported; bool in_xwhiteouts_dir; + struct unicode_map *map; }; =20 struct ovl_dir_file { @@ -166,6 +172,29 @@ static struct ovl_cache_entry *ovl_cache_entry_new(str= uct ovl_readdir_data *rdd, p->is_whiteout =3D false; /* Defer check for overlay.whiteout to ovl_iterate() */ p->check_xwhiteout =3D rdd->in_xwhiteouts_dir && d_type =3D=3D DT_REG; + p->map =3D rdd->map; + p->cf_name =3D NULL; + + if (p->map && !is_dot_dotdot(name, len)) { + const struct qstr str =3D { .name =3D name, .len =3D len }; + int ret; + + p->cf_name =3D kmalloc(OVL_NAME_LEN, GFP_KERNEL); + + if (!p->cf_name) { + kfree(p); + return NULL; + } + + ret =3D utf8_casefold(p->map, &str, p->cf_name, OVL_NAME_LEN); + + if (ret < 0) { + kfree(p->cf_name); + p->cf_name =3D NULL; + } else { + p->cf_len =3D ret; + } + } =20 if (d_type =3D=3D DT_CHR) { p->next_maybe_whiteout =3D rdd->first_maybe_whiteout; @@ -223,8 +252,10 @@ void ovl_cache_free(struct list_head *list) struct ovl_cache_entry *p; struct ovl_cache_entry *n; =20 - list_for_each_entry_safe(p, n, list, l_node) + list_for_each_entry_safe(p, n, list, l_node) { + kfree(p->cf_name); kfree(p); + } =20 INIT_LIST_HEAD(list); } @@ -357,12 +388,19 @@ static int ovl_dir_read_merged(struct dentry *dentry,= struct list_head *list, .list =3D list, .root =3D root, .is_lowest =3D false, + .map =3D NULL, }; int idx, next; const struct ovl_layer *layer; =20 for (idx =3D 0; idx !=3D -1; idx =3D next) { next =3D ovl_path_next(idx, dentry, &realpath, &layer); + +#if IS_ENABLED(CONFIG_UNICODE) + if (ovl_dentry_casefolded(realpath.dentry)) + rdd.map =3D realpath.dentry->d_sb->s_encoding; +#endif + rdd.is_upper =3D ovl_dentry_upper(dentry) =3D=3D realpath.dentry; rdd.in_xwhiteouts_dir =3D layer->has_xwhiteouts && ovl_dentry_has_xwhiteouts(dentry); --=20 2.50.1 From nobody Sun Oct 5 10:47:26 2025 Received: from fanzine2.igalia.com (fanzine2.igalia.com [213.97.179.56]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3B8421F4C98; Tue, 5 Aug 2025 03:48:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.97.179.56 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754365715; cv=none; b=MuTAnSDZacakEHVNRfHs2KcUfjjB2kCGGUuXNlJARAXcvbH+tdgCQOdsz/tRWMPkHK2FUgv8/nsl24BkgofndoBWRHfB7aNOMoEtbK2ShfUjMP9ENgYqIHzX2r6WJuEC+cMHL//YkmHSaITv8Q+CFBsZKLSJkswbAfBEEmjd/bE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754365715; c=relaxed/simple; bh=EYVcJJ8bfz3bNTOwkL5RV1S1s/hR28agLQ7wpNzKsP0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=UWH1GHaD+rz8NLx9DflKqU10+d4fXSlVL3Akv+GvBou5Ov7KgLqulvW+ZQAc+cEMNvMkkFEYLfIcPv4Jn8V624UqIjUYjv2xHBmRjPFosCNbFlMFu7Q4kbwI9owfHOsdOanlqL0Wi9NyGiq6nwxrEHpxru4e61NmAKhsJB6/FZg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=igalia.com; spf=pass smtp.mailfrom=igalia.com; dkim=pass (2048-bit key) header.d=igalia.com header.i=@igalia.com header.b=j+oVwIlc; arc=none smtp.client-ip=213.97.179.56 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=igalia.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=igalia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=igalia.com header.i=@igalia.com header.b="j+oVwIlc" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=igalia.com; s=20170329; h=Cc:To:In-Reply-To:References:Message-Id: Content-Transfer-Encoding:Content-Type:MIME-Version:Subject:Date:From:Sender: Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender :Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=pUYS2ar/dZ4GwLjmvmUrrILIiZNezw9UlzI6p1tNZ2w=; b=j+oVwIlcycL3fosiHoQNZEDLqo TNGxKb87OoMBS414e+GFSF/rZFfhpNlThH7B1D49DIbHLdpemy7pp+9ookYKWQZ1J3LtnqG0gc6OX cRuEujziN6uiNulMp6kv0qU71l9oyGOQeSR++Knm6EZb4BnZX7JhQOohH4pBuaxNNVis6xAx4ou6M xPUH9kWvtUK5VaoZx6ybyZZtF097d9CNQJtJ1i7lrMqTMxGomV8Ns35Gnbu7dpoL6WackMg/j/Jez etIFo1/v/6g3e9hhnJ8/ccM+Qru5auXQk9egxA1qHwWPvUE5wf4KtJTZ531qHq3fIE+QaE7HIPO9X +bcPgJ0g==; Received: from [191.204.199.202] (helo=[192.168.15.100]) by fanzine2.igalia.com with esmtpsa (Cipher TLS1.3:ECDHE_X25519__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim) id 1uj83E-009TiJ-2H; Tue, 05 Aug 2025 05:09:20 +0200 From: =?utf-8?q?Andr=C3=A9_Almeida?= Date: Tue, 05 Aug 2025 00:09:06 -0300 Subject: [PATCH RFC v2 2/8] ovl: Create ovl_strcmp() with casefold support Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250805-tonyk-overlayfs-v2-2-0e54281da318@igalia.com> References: <20250805-tonyk-overlayfs-v2-0-0e54281da318@igalia.com> In-Reply-To: <20250805-tonyk-overlayfs-v2-0-0e54281da318@igalia.com> To: Miklos Szeredi , Amir Goldstein , Theodore Tso , Gabriel Krisman Bertazi Cc: linux-unionfs@vger.kernel.org, linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, Alexander Viro , Christian Brauner , Jan Kara , kernel-dev@igalia.com, =?utf-8?q?Andr=C3=A9_Almeida?= X-Mailer: b4 0.14.2 To add overlayfs support casefold filesystems, create a new function ovl_strcmp() with support for casefold names. If the ovl_cache_entry have stored a casefold name, use it and create a casfold version of the name that is going to be compared to. For the casefold support, just comparing the strings does not work because we need the dentry enconding, so make this function find the equivalent dentry for a giving directory, if any. As this function is used for search and insertion in the red-black tree, that means that the tree node keys are going to be the casefolded version of the dentry's names. Otherwise, the search would not work for case-insensitive mount points. For the non-casefold names, nothing changes. Signed-off-by: Andr=C3=A9 Almeida --- I wonder what should be done here if kmalloc fails, if the strcmp() should fail as well or just fallback to the normal name? --- fs/overlayfs/readdir.c | 42 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 40 insertions(+), 2 deletions(-) diff --git a/fs/overlayfs/readdir.c b/fs/overlayfs/readdir.c index 83bca1bcb0488461b08effa70b32ff2fefba134e..1b8eb10e72a229ade40d1879574= 6d3c779797a06 100644 --- a/fs/overlayfs/readdir.c +++ b/fs/overlayfs/readdir.c @@ -72,6 +72,44 @@ static struct ovl_cache_entry *ovl_cache_entry_from_node= (struct rb_node *n) return rb_entry(n, struct ovl_cache_entry, node); } =20 +/* + * Compare a string with a cache entry, with support for casefold names. + */ +static int ovl_strcmp(const char *str, struct ovl_cache_entry *p, int len) +{ + + const struct qstr qstr =3D { .name =3D str, .len =3D len }; + const char *p_name =3D p->name, *name =3D str; + char *dst =3D NULL; + int cmp, cf_len; + + if (p->cf_name) + p_name =3D p->cf_name; + + if (p->map && !is_dot_dotdot(str, len)) { + dst =3D kmalloc(OVL_NAME_LEN, GFP_KERNEL); + + /* + * strcmp can't fail, so we fallback to the use the original + * name + */ + if (dst) { + cf_len =3D utf8_casefold(p->map, &qstr, dst, OVL_NAME_LEN); + + if (cf_len > 0) { + name =3D dst; + dst[cf_len] =3D '\0'; + } + } + } + + cmp =3D strncmp(name, p_name, cf_len); + + kfree(dst); + + return cmp; +} + static bool ovl_cache_entry_find_link(const char *name, int len, struct rb_node ***link, struct rb_node **parent) @@ -85,7 +123,7 @@ static bool ovl_cache_entry_find_link(const char *name, = int len, =20 *parent =3D *newp; tmp =3D ovl_cache_entry_from_node(*newp); - cmp =3D strncmp(name, tmp->name, len); + cmp =3D ovl_strcmp(name, tmp, len); if (cmp > 0) newp =3D &tmp->node.rb_right; else if (cmp < 0 || len < tmp->len) @@ -107,7 +145,7 @@ static struct ovl_cache_entry *ovl_cache_entry_find(str= uct rb_root *root, while (node) { struct ovl_cache_entry *p =3D ovl_cache_entry_from_node(node); =20 - cmp =3D strncmp(name, p->name, len); + cmp =3D ovl_strcmp(name, p, len); if (cmp > 0) node =3D p->node.rb_right; else if (cmp < 0 || len < p->len) --=20 2.50.1 From nobody Sun Oct 5 10:47:26 2025 Received: from fanzine2.igalia.com (fanzine2.igalia.com [213.97.179.56]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7885E204583; Tue, 5 Aug 2025 03:48:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.97.179.56 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754365724; cv=none; b=iY352Ey/9NoKj8z4aJjYFpr8nSUdGsS8Sr2QuflqXNSKWoszNiPdab7nAawPcsgWq1W+US+xCyUdek6wIybDAZnB0tuYUVVnVf99k4Sc2hNZjsLqu53BH2bzTPCxXfcCMlYDJJsXRjTJk1tgqEwEn9JoR4wctTxxgfP8CXhgb70= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754365724; c=relaxed/simple; bh=38BjtSCjK+HP9uqEYbMeA3yku5edNnFjXtFDcME+jqo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=t6xSK6gYiizOXg8HOtpSpyMPIAPi1FysZ+RuU+aE0Thi+dgRcWOT4hTSVG9v3IF+m7xl6kIX+AsHg6qXMOqIaKBTa1YVUMXqLXKEKqGutY2Hi8HuEQVxwlUDPc/iRNKOqqYoEibd65/C2yikimEqVux+tjIFpuXRaqUxOLF45FQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=igalia.com; spf=pass smtp.mailfrom=igalia.com; dkim=pass (2048-bit key) header.d=igalia.com header.i=@igalia.com header.b=HCqttV7M; arc=none smtp.client-ip=213.97.179.56 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=igalia.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=igalia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=igalia.com header.i=@igalia.com header.b="HCqttV7M" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=igalia.com; s=20170329; h=Cc:To:In-Reply-To:References:Message-Id: Content-Transfer-Encoding:Content-Type:MIME-Version:Subject:Date:From:Sender: Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender :Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=ZDamLIHjZ0U9g0xjh5flX+ookgZBZvbyP3scFrG6bUU=; b=HCqttV7Mw6lfzGp5OiCVf4riHQ 36OMv+uyEx24Ks+/XLzf5dKKq2KU1vVtrUqI29xhboQvRsHvKNGVPv/ggI72P4HDu9YnH2rHp+iyM qEv3qzioCOMauxuSVQJdJgcMxWBDRwTPKy0ECBOLh2MlFf9+rVxfOL1Tr4RLFBOZFYY1GNQ5V48fV BbvgKHZX2iTudMMdXJqxHW8cNvVQt9K6EfVroFWZ9KB0QUVBBgqf7GoAWSldCBRJ3UGoca4PtdO0A yZpgt5Ws47P7WSI5bTOzRKTHOii+zOXnlhE7hg2wuqkmLxTc35pL+0mFvRJloEoSx27vXvl733oe+ +m4ukxLQ==; Received: from [191.204.199.202] (helo=[192.168.15.100]) by fanzine2.igalia.com with esmtpsa (Cipher TLS1.3:ECDHE_X25519__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim) id 1uj83G-009TiJ-Sf; Tue, 05 Aug 2025 05:09:23 +0200 From: =?utf-8?q?Andr=C3=A9_Almeida?= Date: Tue, 05 Aug 2025 00:09:07 -0300 Subject: [PATCH RFC v2 3/8] fs: Create sb_same_encoding() helper Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250805-tonyk-overlayfs-v2-3-0e54281da318@igalia.com> References: <20250805-tonyk-overlayfs-v2-0-0e54281da318@igalia.com> In-Reply-To: <20250805-tonyk-overlayfs-v2-0-0e54281da318@igalia.com> To: Miklos Szeredi , Amir Goldstein , Theodore Tso , Gabriel Krisman Bertazi Cc: linux-unionfs@vger.kernel.org, linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, Alexander Viro , Christian Brauner , Jan Kara , kernel-dev@igalia.com, =?utf-8?q?Andr=C3=A9_Almeida?= X-Mailer: b4 0.14.2 For cases where a file lookup can go to different mount points (like in overlayfs), both super blocks must have the same encoding and the same flags. To help with that, create a sb_same_encoding() function. Signed-off-by: Andr=C3=A9 Almeida --- include/linux/fs.h | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/include/linux/fs.h b/include/linux/fs.h index 1948b2c828d3e83691f0b0892b4a7a87501c11db..413d4b2b7a41c0706324d01e719= 63bc481f383e4 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h @@ -3744,6 +3744,28 @@ static inline bool sb_has_encoding(const struct supe= r_block *sb) #endif } =20 +/* + * Compare if two super blocks have the same encoding and flags + */ +static inline bool sb_same_encoding(const struct super_block *sb1, + const struct super_block *sb2) +{ +#if IS_ENABLED(CONFIG_UNICODE) + if (sb1->s_encoding =3D=3D sb2->s_encoding) + return true; + + if (sb1->s_encoding && sb2->s_encoding && + (sb1->s_encoding->version =3D=3D sb2->s_encoding->version) && + (sb1->s_encoding_flags =3D=3D sb2->s_encoding_flags)) + return true; + else + return false; +#else + return true; +#endif +} + + int may_setattr(struct mnt_idmap *idmap, struct inode *inode, unsigned int ia_valid); int setattr_prepare(struct mnt_idmap *, struct dentry *, struct iattr *); --=20 2.50.1 From nobody Sun Oct 5 10:47:26 2025 Received: from fanzine2.igalia.com (fanzine2.igalia.com [213.97.179.56]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 65EBF2AF03; Tue, 5 Aug 2025 03:09:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.97.179.56 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754363371; cv=none; b=cqtOX1r/1JG3HL1RpRAuG16G6mi2YMfNpejZIjBmF4GBnBd9a6KC8NIuExCF75BHkKfeNDT2RMGubYc0W/0rf2dpYhlzgWCEqGp3rtSWjPscYdg6X5TbMAn7y4Nejd4p22jHPc163XlPfDWwxRjsDL9T1gyYonvKj1q+/HYO/ps= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754363371; c=relaxed/simple; bh=5IPxB+ennw3I1nBRGMF7zsWHckDZLsz9IvAqp7Bwcsk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Ml/IdQHv2YQx59yLrXr955gGRipsNP0iYJSJUVTjmT2T0XwUdTwxs9wTjcu1ZpziGAsZXbWT8D3cMGjpBhqF6h2cGY2lFGRK4dzeiXtNy1gx2g+iDMUcic7+7X5Uf1WK7W+YBu8eO9EdpxyT76gqcly5JZUM6Xp8V6ohLpDbgRs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=igalia.com; spf=pass smtp.mailfrom=igalia.com; dkim=pass (2048-bit key) header.d=igalia.com header.i=@igalia.com header.b=ZKZQ7dx4; arc=none smtp.client-ip=213.97.179.56 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=igalia.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=igalia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=igalia.com header.i=@igalia.com header.b="ZKZQ7dx4" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=igalia.com; s=20170329; h=Cc:To:In-Reply-To:References:Message-Id: Content-Transfer-Encoding:Content-Type:MIME-Version:Subject:Date:From:Sender: Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender :Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=Ojr9sG0RRJKao/SYLMHXpb4M+5kUiC+kbpn9/C/Ofw4=; b=ZKZQ7dx45JOoO3Mg1wBFlRkQ0M OWBfS3CNRSDmgXvrWzeOfXVL3BZv8hlOdvopil3vQX1XQlq0a0wrvAzh9IIaNf0MY3pxrwdAOWJJc BpRzXphhAzet0l9R1+wR+Bii9PM7pgzYt4als1oiJjFFMie29Y/zb4wY8WUTyrNN/figifbQ2C64J cIeiE9MgC5USOFvxcdRtRI66dpLMJlIfUOL5S0OMWe7h4KkJ8SxmhGoyvUx5zESlyLzC+g54Smbz+ RSgmrKwRCPQFMvpuMC1GVyJB10vLFr6k98bj7mdhwTUMqmeS3lk2LQbvkjmtTsB3NADEP6qjAnfPI 5ifAvwIw==; Received: from [191.204.199.202] (helo=[192.168.15.100]) by fanzine2.igalia.com with esmtpsa (Cipher TLS1.3:ECDHE_X25519__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim) id 1uj83J-009TiJ-Mm; Tue, 05 Aug 2025 05:09:25 +0200 From: =?utf-8?q?Andr=C3=A9_Almeida?= Date: Tue, 05 Aug 2025 00:09:08 -0300 Subject: [PATCH RFC v2 4/8] ovl: Ensure that all mount points have the same encoding Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250805-tonyk-overlayfs-v2-4-0e54281da318@igalia.com> References: <20250805-tonyk-overlayfs-v2-0-0e54281da318@igalia.com> In-Reply-To: <20250805-tonyk-overlayfs-v2-0-0e54281da318@igalia.com> To: Miklos Szeredi , Amir Goldstein , Theodore Tso , Gabriel Krisman Bertazi Cc: linux-unionfs@vger.kernel.org, linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, Alexander Viro , Christian Brauner , Jan Kara , kernel-dev@igalia.com, =?utf-8?q?Andr=C3=A9_Almeida?= X-Mailer: b4 0.14.2 When mounting different mount points with casefold support, they should use the same encoding version and have the same flags to avoid any kind of incompatibility issues. Signed-off-by: Andr=C3=A9 Almeida --- fs/overlayfs/super.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/fs/overlayfs/super.c b/fs/overlayfs/super.c index 4afa91882075110fdeb5e265ce207236c9eff28e..cfe8010616414a5ec0421b9ac59= 47596bfd0a5bd 100644 --- a/fs/overlayfs/super.c +++ b/fs/overlayfs/super.c @@ -998,6 +998,7 @@ static int ovl_get_layers(struct super_block *sb, struc= t ovl_fs *ofs, int err; unsigned int i; size_t nr_merged_lower; + struct super_block *sb1 =3D NULL; =20 ofs->fs =3D kcalloc(ctx->nr + 2, sizeof(struct ovl_sb), GFP_KERNEL); if (ofs->fs =3D=3D NULL) @@ -1024,6 +1025,8 @@ static int ovl_get_layers(struct super_block *sb, str= uct ovl_fs *ofs, if (ovl_upper_mnt(ofs)) { ofs->fs[0].sb =3D ovl_upper_mnt(ofs)->mnt_sb; ofs->fs[0].is_lower =3D false; + + sb1 =3D ofs->fs[0].sb; } =20 nr_merged_lower =3D ctx->nr - ctx->nr_data; @@ -1067,6 +1070,9 @@ static int ovl_get_layers(struct super_block *sb, str= uct ovl_fs *ofs, return err; } =20 + if (!sb1) + sb1 =3D mnt->mnt_sb; + /* * Make lower layers R/O. That way fchmod/fchown on lower file * will fail instead of modifying lower fs. @@ -1083,6 +1089,11 @@ static int ovl_get_layers(struct super_block *sb, st= ruct ovl_fs *ofs, l->name =3D NULL; ofs->numlayer++; ofs->fs[fsid].is_lower =3D true; + + if (!sb_same_encoding(sb1, mnt->mnt_sb)) { + pr_err("all layers must have the same encoding\n"); + return -EINVAL; + } } =20 /* --=20 2.50.1 From nobody Sun Oct 5 10:47:26 2025 Received: from fanzine2.igalia.com (fanzine2.igalia.com [213.97.179.56]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E6A3C1A23B9; Tue, 5 Aug 2025 03:09:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.97.179.56 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754363373; cv=none; b=J4o4XQfLoK05MmSC1YGFA2W/MJqBtC3vm18Yk9T8H0xWVA732Lwm5GIzW+OF0aKZn3F12isorIbTTJmt24KXth0maYLQxS8Qy/4r5SNor59LLuAgZiuIaCiqBgZFoCeOPQyDTfBVQHEW2fVwKRNrvoNTTl+dndJIrALiiaem06I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754363373; c=relaxed/simple; bh=LY/VUiqBCx9iQ9lvHNZ+xNQrDjaq0r1TZBPbRYI/Br0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=u/Rq6XcO+Eh6sht7IMHwk1bnRW2R3lL5aeFYLdNBGDwlpVChUGQu4sNIK4qiZ9BAGp7z9juW+5PCdqMZo0N5bvxYPMg1edkwMLjuhNTXHmsm/TyNy+qujpnl4pJ6Qium/cLHdldelUpk/zEYtIn8yjNK7YNiiUhbXSkRHljE4Q0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=igalia.com; spf=pass smtp.mailfrom=igalia.com; dkim=pass (2048-bit key) header.d=igalia.com header.i=@igalia.com header.b=BcgMcsTQ; arc=none smtp.client-ip=213.97.179.56 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=igalia.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=igalia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=igalia.com header.i=@igalia.com header.b="BcgMcsTQ" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=igalia.com; s=20170329; h=Cc:To:In-Reply-To:References:Message-Id: Content-Transfer-Encoding:Content-Type:MIME-Version:Subject:Date:From:Sender: Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender :Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=4OxS0Na1+fzCuirl+2tIZhSP5el2IUXZmaUJ4/W74+s=; b=BcgMcsTQUGcoaikeEUPimR4fTp SkNpXqoU8cwiJZTbtsJARziq2GxgW+Iqr2RQH+6Liz1cN+AJqRuNogonnEbh07GiQcBCLUvsCzYOF VvgAZm12PV5mV5rb1kBrZNPotbB5p2q4U865aq8wYqW5VQBmMvnbYfhplS/wa9pTCCr+XRjutEf/w +3gUtQDcDe9XLI1mLMTz7a9c6vEWI87zyjbnxjWwMzF03Vk91lgusPAMiE9d0mBui85eSDMaej0au f8euOY0IDjdtfmJx/xJsLssz9mVF1Vw6gwon1RUx1wtqIJs6APGuCC74M1FjaM5mM8NhQie51T42Z 9M7YgMEQ==; Received: from [191.204.199.202] (helo=[192.168.15.100]) by fanzine2.igalia.com with esmtpsa (Cipher TLS1.3:ECDHE_X25519__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim) id 1uj83M-009TiJ-Gr; Tue, 05 Aug 2025 05:09:28 +0200 From: =?utf-8?q?Andr=C3=A9_Almeida?= Date: Tue, 05 Aug 2025 00:09:09 -0300 Subject: [PATCH RFC v2 5/8] ovl: Set case-insensitive dentry operations for ovl sb Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250805-tonyk-overlayfs-v2-5-0e54281da318@igalia.com> References: <20250805-tonyk-overlayfs-v2-0-0e54281da318@igalia.com> In-Reply-To: <20250805-tonyk-overlayfs-v2-0-0e54281da318@igalia.com> To: Miklos Szeredi , Amir Goldstein , Theodore Tso , Gabriel Krisman Bertazi Cc: linux-unionfs@vger.kernel.org, linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, Alexander Viro , Christian Brauner , Jan Kara , kernel-dev@igalia.com, =?utf-8?q?Andr=C3=A9_Almeida?= X-Mailer: b4 0.14.2 For filesystems with encoding (i.e. with case-insensitive support), set the dentry operations for the super block with generic_set_sb_d_ops(). Also, use the upper layer encoding as the ovl super block encoding. Signed-off-by: Andr=C3=A9 Almeida --- fs/overlayfs/super.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/fs/overlayfs/super.c b/fs/overlayfs/super.c index cfe8010616414a5ec0421b9ac5947596bfd0a5bd..5d55a287a8c0f69aeaf2ada862c= 59bd7eb7b10f2 100644 --- a/fs/overlayfs/super.c +++ b/fs/overlayfs/super.c @@ -1423,6 +1423,16 @@ int ovl_fill_super(struct super_block *sb, struct fs= _context *fc) =20 sb->s_stack_depth =3D upper_sb->s_stack_depth; sb->s_time_gran =3D upper_sb->s_time_gran; + +#if IS_ENABLED(CONFIG_UNICODE) + if (sb_has_encoding(upper_sb)) { + sb->s_encoding =3D upper_sb->s_encoding; + sb->s_encoding_flags =3D upper_sb->s_encoding_flags; + } + + generic_set_sb_d_ops(sb); +#endif + } oe =3D ovl_get_lowerstack(sb, ctx, ofs, layers); err =3D PTR_ERR(oe); --=20 2.50.1 From nobody Sun Oct 5 10:47:26 2025 Received: from fanzine2.igalia.com (fanzine2.igalia.com [213.97.179.56]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 938D21E5B78; Tue, 5 Aug 2025 03:09:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.97.179.56 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754363375; cv=none; b=ezQGGuHYrUf1dejSJMJsYpkHid6EobTWMnF8ON/cnfX5ODA2Otufv604tlAJu+9mQQCVX30TBnT40s5VTA2f+AB6umJG9m1UA48QP1IQg5IHjeidoZ6ytZkOUtgOfOKVcG0IQafGUgE3q65HiyDraHWQg3GcQgitl74cTfZaX8U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754363375; c=relaxed/simple; bh=se7k2jYLkmCCJf6OzPRIBN6BVtEJXINkpUlnhHgwbyk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=hazc9RdGuGu8uPI1rqARZXZeTXcnyyTMAHs5u4YLMDiq6pDk1NWlsOwK0ClSJ7qV/XF2/o/pHUAOWC06rZRJ5LQNCUH3XBXzMlD2JCq5tFKKLchUILogjIk8Ek/cltL42zxAPuZNyaV4SrUyOLxsBm30Wm34AqlgIxwFjV3Rrw0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=igalia.com; spf=pass smtp.mailfrom=igalia.com; dkim=pass (2048-bit key) header.d=igalia.com header.i=@igalia.com header.b=KmFif95L; arc=none smtp.client-ip=213.97.179.56 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=igalia.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=igalia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=igalia.com header.i=@igalia.com header.b="KmFif95L" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=igalia.com; s=20170329; h=Cc:To:In-Reply-To:References:Message-Id: Content-Transfer-Encoding:Content-Type:MIME-Version:Subject:Date:From:Sender: Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender :Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=AuaiQMyoNko/Bv7nJGtZn0B3kdMsZfWg7xvk0nStPoM=; b=KmFif95LMyPV8nX1CZWmA8d/JU SLOkLp7viNGSP+fDeyO+SY0ELeDCr0+aroQLu5y9ZWKlZC/RhjUoyqSgvd61ZOg4ctbRbQ/AIBXNJ BsmMJdDnGXBTqtTBeT80xZciTw6JlaZta7XNcYhS03DUPfyGNd4bgP68fpLUXVEfmELSi6lteubK9 5KAjg0wKuAwTly6UnRb7sXZgM7eJGMtjuu2DRmzCdJbXn+OpSiiSi4vnLQgJbYSsVQvyzsrm9V1V2 KRKKwqO/h1INIWQ/QsNIvv1KdEhocGLX11RokRMRr4Sa7jv6rAyqtarhpZfTy22nwoBlJGcUXxco+ nvzb24OQ==; Received: from [191.204.199.202] (helo=[192.168.15.100]) by fanzine2.igalia.com with esmtpsa (Cipher TLS1.3:ECDHE_X25519__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim) id 1uj83P-009TiJ-Az; Tue, 05 Aug 2025 05:09:31 +0200 From: =?utf-8?q?Andr=C3=A9_Almeida?= Date: Tue, 05 Aug 2025 00:09:10 -0300 Subject: [PATCH RFC v2 6/8] ovl: Set inode S_CASEFOLD for casefolded dentries Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250805-tonyk-overlayfs-v2-6-0e54281da318@igalia.com> References: <20250805-tonyk-overlayfs-v2-0-0e54281da318@igalia.com> In-Reply-To: <20250805-tonyk-overlayfs-v2-0-0e54281da318@igalia.com> To: Miklos Szeredi , Amir Goldstein , Theodore Tso , Gabriel Krisman Bertazi Cc: linux-unionfs@vger.kernel.org, linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, Alexander Viro , Christian Brauner , Jan Kara , kernel-dev@igalia.com, =?utf-8?q?Andr=C3=A9_Almeida?= X-Mailer: b4 0.14.2 For casefolded dentries, set their inode flag with S_CASEFOLD. Signed-off-by: Andr=C3=A9 Almeida --- fs/overlayfs/inode.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/fs/overlayfs/inode.c b/fs/overlayfs/inode.c index ecb9f2019395ecd01a124ad029375b1a1d13ebb5..5dec29811b6a5088f838793eb2f= 561abd12db1d2 100644 --- a/fs/overlayfs/inode.c +++ b/fs/overlayfs/inode.c @@ -1301,6 +1301,13 @@ struct inode *ovl_get_inode(struct super_block *sb, =20 if (inode->i_state & I_NEW) unlock_new_inode(inode); + + if (realpath.dentry && ovl_dentry_casefolded(realpath.dentry)) { + int flags =3D inode->i_flags | S_CASEFOLD; + + inode_set_flags(inode, flags, flags); + } + out: return inode; =20 --=20 2.50.1 From nobody Sun Oct 5 10:47:26 2025 Received: from fanzine2.igalia.com (fanzine2.igalia.com [213.97.179.56]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 811761C7017; Tue, 5 Aug 2025 03:09:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.97.179.56 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754363378; cv=none; b=UIecuznUGXVH9NYpHEC/K8UvGiVd6Hle1t6EJsszKu9MtG2llfCOv8JRvAbvAavNnGTxmMKBJkw+UR/Z3eu5xYf9eUoxDP0y894pBS380K2s7EWOgjqpcKf90HR4F5av+6cTEmP+PrvxKYXlNDeGWEyfB2Ve3NRIAZXUWg/zFRk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754363378; c=relaxed/simple; bh=sVKGQYZABr+uXF5DuzMT4wcV399UBDjv2xqzr5bfYaM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=BlMfDvNlWVhWDo8hD6VdQpieEiEhbn5/T9xx/EoxlB9ezTm1NU1PBNMCzbB8g4YNerPrxXEebCQ8n7MZ0xRu3r/RzGHdOYt1JpCOjQdb9e6jGXq14/dD8j5eP5IaQ7B8pVfAFgHaOs7lck2TbeQ/g+vDeb7S3u1PBI7mL9M4HLY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=igalia.com; spf=pass smtp.mailfrom=igalia.com; dkim=pass (2048-bit key) header.d=igalia.com header.i=@igalia.com header.b=FYMQQOOi; arc=none smtp.client-ip=213.97.179.56 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=igalia.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=igalia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=igalia.com header.i=@igalia.com header.b="FYMQQOOi" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=igalia.com; s=20170329; h=Cc:To:In-Reply-To:References:Message-Id: Content-Transfer-Encoding:Content-Type:MIME-Version:Subject:Date:From:Sender: Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender :Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=r7L8d0fGkTI8sFsx42NCIdi0nGDAC2uQf7TDxAnWwwM=; b=FYMQQOOi623eQaHcZuOtIsvTZe 5Dmb07Kimx3TUJdOXWZhWCh8s+JQwB0OIxALbJeK9xZTGGlZJgOWiclPsWWW5hef9P9cJ44StwgPY 9+k033eSh8/Xvws11d9iIktN49SdhVVwdP3yJPgOMaKOnCF7E9UDOoIjW2i1lyWzH1sX6C8Y1V4Xb GtiUuaXntvn+wF+o8/l2aeuZ642TM3Oob80LWjUnwnh0cLY05ROpAKMiiVSnOU0uEni5Zf2frd7IK lTbLeNcu96iJih4FJUCVbX0WTTlyP/fL/+0eBnogZffZmd2EGqp6uWzaidku44iRmQxEVy8oYZpO5 LqWziO8A==; Received: from [191.204.199.202] (helo=[192.168.15.100]) by fanzine2.igalia.com with esmtpsa (Cipher TLS1.3:ECDHE_X25519__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim) id 1uj83S-009TiJ-5D; Tue, 05 Aug 2025 05:09:34 +0200 From: =?utf-8?q?Andr=C3=A9_Almeida?= Date: Tue, 05 Aug 2025 00:09:11 -0300 Subject: [PATCH RFC v2 7/8] ovl: Check casefold consistency in ovl stack Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250805-tonyk-overlayfs-v2-7-0e54281da318@igalia.com> References: <20250805-tonyk-overlayfs-v2-0-0e54281da318@igalia.com> In-Reply-To: <20250805-tonyk-overlayfs-v2-0-0e54281da318@igalia.com> To: Miklos Szeredi , Amir Goldstein , Theodore Tso , Gabriel Krisman Bertazi Cc: linux-unionfs@vger.kernel.org, linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, Alexander Viro , Christian Brauner , Jan Kara , kernel-dev@igalia.com, =?utf-8?q?Andr=C3=A9_Almeida?= X-Mailer: b4 0.14.2 overlayfs supports case-insensitive filesystems as long as they are consistent regarding its enabled status. If one layer has it enabled, every other layer must have it enabled as well. Check if this consistency is being respected, and return an error otherwise. Signed-off-by: Andr=C3=A9 Almeida --- fs/overlayfs/namei.c | 25 ++++++++++--------------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/fs/overlayfs/namei.c b/fs/overlayfs/namei.c index 76d6248b625e7c58e09685e421aef616aadea40a..5dee504667911f04ce543f7977d= 0d4c4a1190cc7 100644 --- a/fs/overlayfs/namei.c +++ b/fs/overlayfs/namei.c @@ -238,18 +238,6 @@ static int ovl_lookup_single(struct dentry *base, stru= ct ovl_lookup_data *d, bool is_upper =3D d->layer->idx =3D=3D 0; char val; =20 - /* - * We allow filesystems that are case-folding capable but deny composing - * ovl stack from case-folded directories. If someone has enabled case - * folding on a directory on underlying layer, the warranty of the ovl - * stack is voided. - */ - if (ovl_dentry_casefolded(base)) { - warn =3D "case folded parent"; - err =3D -ESTALE; - goto out_warn; - } - this =3D ovl_lookup_positive_unlocked(d, name, base, namelen, drop_negati= ve); if (IS_ERR(this)) { err =3D PTR_ERR(this); @@ -259,9 +247,16 @@ static int ovl_lookup_single(struct dentry *base, stru= ct ovl_lookup_data *d, goto out_err; } =20 - if (ovl_dentry_casefolded(this)) { - warn =3D "case folded child"; - err =3D -EREMOTE; + /* + * We allow filesystems that are case-folding capable as long as the + * layers are consistently enabled in the stack, enabled for every layer + * or disabled in all layers. If someone has enabled case + * folding on a directory on underlying layer, the warranty of the ovl + * stack is voided. + */ + if (ovl_dentry_casefolded(base) !=3D ovl_dentry_casefolded(this)) { + warn =3D "casefold mismatch between parent and child"; + err =3D -ESTALE; goto out_warn; } =20 --=20 2.50.1 From nobody Sun Oct 5 10:47:26 2025 Received: from fanzine2.igalia.com (fanzine2.igalia.com [213.97.179.56]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 44D831DED49; Tue, 5 Aug 2025 03:09:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.97.179.56 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754363380; cv=none; b=Bh81M71Fn5k06C1NpKD+65qAPQwi3i2mkwi8Z+QK5NlXbszNWd+NpQGLG9jVoNhe+/SEchBfYN7sdxSng3oOw6a2VW/AHGYofwtUOVtRMcVMqruYpjRX7+l+bF25Txzlg+JVWacFXP2qBg5uAjtWc4IwuP8SKjVQPqB3ClF/Yf8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754363380; c=relaxed/simple; bh=KXRKtpIorrVSm+ENgWZSMXbBbvXp7K4wV9sI2VRsD9Q=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=W3aqm0qyAjFhpbMRf1NtdTHddk5irY1L1Q6ZxYdLqFjZXL3huTOxfbRnUhUgpTPZnAllOXrhP400F3B8HHyV8KkJcOIaJo/VSSmOpUQDKCgui1vVsEfuZIEnmURzVyzLFKaqDqwlxfqQGgJYksAk0mOSEQzF8RcAgmQj39wQEps= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=igalia.com; spf=pass smtp.mailfrom=igalia.com; dkim=pass (2048-bit key) header.d=igalia.com header.i=@igalia.com header.b=G1rFRbYB; arc=none smtp.client-ip=213.97.179.56 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=igalia.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=igalia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=igalia.com header.i=@igalia.com header.b="G1rFRbYB" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=igalia.com; s=20170329; h=Cc:To:In-Reply-To:References:Message-Id: Content-Transfer-Encoding:Content-Type:MIME-Version:Subject:Date:From:Sender: Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender :Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=MAYPBEI5qE+orymxndgIHcMY+kCdXPZFTQwApjcA/OI=; b=G1rFRbYBbWZggMuAeUHsub6NNp EBv2R1BInLgB+VbP5ChOi2/N/Vkcep6auP6mBCS4JV2sa6bZ5kg/B/Ucu4nRQQ/Me9E9vOoYfLy5M CT5Io59c2bTv38lhReAZMikXznOm+I2Z4YXG9LFdhQczflcEsUzvSlSAsLANS/LgLN3VUQREnMoqd 9D1D06lQaso1ydL/42tDkHbWwROw34Y/dqy0RpZsYGkgXb/5u0Mw0INUhYE/BFVYkVhoIOEQTBSwc bzvybEnU6XgTpHnX7UjDoHBPgLwK/4go7OkugenVbd20BwazSmNJ12RJf/QzeJXH9OfRhLKJ+jjzI ntL/XJUw==; Received: from [191.204.199.202] (helo=[192.168.15.100]) by fanzine2.igalia.com with esmtpsa (Cipher TLS1.3:ECDHE_X25519__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim) id 1uj83U-009TiJ-VU; Tue, 05 Aug 2025 05:09:37 +0200 From: =?utf-8?q?Andr=C3=A9_Almeida?= Date: Tue, 05 Aug 2025 00:09:12 -0300 Subject: [PATCH RFC v2 8/8] ovl: Drop restrictions for casefolded dentries Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250805-tonyk-overlayfs-v2-8-0e54281da318@igalia.com> References: <20250805-tonyk-overlayfs-v2-0-0e54281da318@igalia.com> In-Reply-To: <20250805-tonyk-overlayfs-v2-0-0e54281da318@igalia.com> To: Miklos Szeredi , Amir Goldstein , Theodore Tso , Gabriel Krisman Bertazi Cc: linux-unionfs@vger.kernel.org, linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, Alexander Viro , Christian Brauner , Jan Kara , kernel-dev@igalia.com, =?utf-8?q?Andr=C3=A9_Almeida?= X-Mailer: b4 0.14.2 Drop the restriction for casefold dentries to enable support for casefold filesystems in overlayfs. Signed-off-by: Andr=C3=A9 Almeida --- fs/overlayfs/params.c | 7 ------- fs/overlayfs/util.c | 8 ++++---- 2 files changed, 4 insertions(+), 11 deletions(-) diff --git a/fs/overlayfs/params.c b/fs/overlayfs/params.c index f4e7fff909ac49e2f8c58a76273426c1158a7472..dd3a893d37603842f7d19d90acc= b981f0d12e971 100644 --- a/fs/overlayfs/params.c +++ b/fs/overlayfs/params.c @@ -281,13 +281,6 @@ static int ovl_mount_dir_check(struct fs_context *fc, = const struct path *path, if (!d_is_dir(path->dentry)) return invalfc(fc, "%s is not a directory", name); =20 - /* - * Allow filesystems that are case-folding capable but deny composing - * ovl stack from case-folded directories. - */ - if (ovl_dentry_casefolded(path->dentry)) - return invalfc(fc, "case-insensitive directory on %s not supported", nam= e); - if (ovl_dentry_weird(path->dentry)) return invalfc(fc, "filesystem on %s not supported", name); =20 diff --git a/fs/overlayfs/util.c b/fs/overlayfs/util.c index a33115e7384c129c543746326642813add63f060..7a6ee058568283453350153c172= 0c35e11ad4d1b 100644 --- a/fs/overlayfs/util.c +++ b/fs/overlayfs/util.c @@ -210,11 +210,11 @@ bool ovl_dentry_weird(struct dentry *dentry) return true; =20 /* - * 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; =20 return dentry->d_flags & (DCACHE_OP_HASH | DCACHE_OP_COMPARE); } --=20 2.50.1