All of lore.kernel.org
 help / color / mirror / Atom feed
From: Chuck Lever <cel@kernel.org>
To: Al Viro <viro@zeniv.linux.org.uk>,
	 Christian Brauner <brauner@kernel.org>, Jan Kara <jack@suse.cz>
Cc: linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org,
	 linux-xfs@vger.kernel.org, linux-cifs@vger.kernel.org,
	 linux-nfs@vger.kernel.org, linux-api@vger.kernel.org,
	 linux-f2fs-devel@lists.sourceforge.net,
	hirofumi@mail.parknet.co.jp,  linkinjeon@kernel.org,
	sj1557.seo@samsung.com, yuezhang.mo@sony.com,
	 almaz.alexandrovich@paragon-software.com, slava@dubeyko.com,
	 glaubitz@physik.fu-berlin.de, frank.li@vivo.com, tytso@mit.edu,
	 adilger.kernel@dilger.ca, cem@kernel.org, sfrench@samba.org,
	 pc@manguebit.org, ronniesahlberg@gmail.com,
	sprasad@microsoft.com,  trondmy@kernel.org, anna@kernel.org,
	jaegeuk@kernel.org, chao@kernel.org,  hansg@kernel.org,
	senozhatsky@chromium.org,  Chuck Lever <chuck.lever@oracle.com>,
	 Roland Mainz <roland.mainz@nrubsig.org>
Subject: [PATCH v14 12/15] isofs: Implement fileattr_get for case sensitivity
Date: Thu, 07 May 2026 04:53:05 -0400	[thread overview]
Message-ID: <20260507-case-sensitivity-v14-12-e62cc8200435@oracle.com> (raw)
In-Reply-To: <20260507-case-sensitivity-v14-0-e62cc8200435@oracle.com>

From: Chuck Lever <chuck.lever@oracle.com>

Upper layers such as NFSD need a way to query whether a
filesystem handles filenames in a case-sensitive manner so
they can provide correct semantics to remote clients. Without
this information, NFS exports of ISO 9660 filesystems cannot
advertise their filename case behavior.

Implement isofs_fileattr_get() to report ISO 9660 case handling
behavior. The 'check=r' (relaxed) mount option enables
case-insensitive lookups and is reported via FS_XFLAG_CASEFOLD.
By default, Joliet extensions operate in relaxed mode while
plain ISO 9660 uses strict (case-sensitive) mode.

Plain ISO 9660 names on the medium are uppercase. When neither
Rock Ridge nor Joliet is in effect, the default 'map=n' option
(and 'map=a') routes lookup and readdir through
isofs_name_translate(), which forces A-Z to a-z. The names
visible to userspace then differ in case from the on-disc form,
so report FS_XFLAG_CASENONPRESERVING in that configuration. Rock
Ridge and Joliet both deliver names as authored, and 'map=o'
emits the raw on-disc name unchanged, so those configurations
remain case-preserving.

Casefolding is a directory property, and the in-tree consumers
(NFSD, ksmbd) issue the query against a directory: NFSD walks
to the parent for non-directory dentries before calling
vfs_fileattr_get(), and ksmbd reports per-share attributes from
the share root. Wire .fileattr_get only on
isofs_dir_inode_operations. The CASEFOLD flag is set in both
fa->fsx_xflags and fa->flags so FS_IOC_FSGETXATTR and
FS_IOC_GETFLAGS agree.

Reviewed-by: Jan Kara <jack@suse.cz>
Reviewed-by: Roland Mainz <roland.mainz@nrubsig.org>
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
---
 fs/isofs/dir.c   | 16 ++++++++++++++++
 fs/isofs/isofs.h |  3 +++
 2 files changed, 19 insertions(+)

diff --git a/fs/isofs/dir.c b/fs/isofs/dir.c
index 2fd9948d606e..55385a72a4ce 100644
--- a/fs/isofs/dir.c
+++ b/fs/isofs/dir.c
@@ -14,6 +14,7 @@
 #include <linux/gfp.h>
 #include <linux/filelock.h>
 #include "isofs.h"
+#include <linux/fileattr.h>
 
 int isofs_name_translate(struct iso_directory_record *de, char *new, struct inode *inode)
 {
@@ -267,6 +268,20 @@ static int isofs_readdir(struct file *file, struct dir_context *ctx)
 	return result;
 }
 
+int isofs_fileattr_get(struct dentry *dentry, struct file_kattr *fa)
+{
+	struct isofs_sb_info *sbi = ISOFS_SB(dentry->d_sb);
+
+	if (sbi->s_check == 'r') {
+		fa->fsx_xflags |= FS_XFLAG_CASEFOLD;
+		fa->flags |= FS_CASEFOLD_FL;
+	}
+	if (!sbi->s_joliet_level && !sbi->s_rock &&
+	    (sbi->s_mapping == 'n' || sbi->s_mapping == 'a'))
+		fa->fsx_xflags |= FS_XFLAG_CASENONPRESERVING;
+	return 0;
+}
+
 const struct file_operations isofs_dir_operations =
 {
 	.llseek = generic_file_llseek,
@@ -281,6 +296,7 @@ const struct file_operations isofs_dir_operations =
 const struct inode_operations isofs_dir_inode_operations =
 {
 	.lookup = isofs_lookup,
+	.fileattr_get = isofs_fileattr_get,
 };
 
 
diff --git a/fs/isofs/isofs.h b/fs/isofs/isofs.h
index 506555837533..0ec8b24a42ed 100644
--- a/fs/isofs/isofs.h
+++ b/fs/isofs/isofs.h
@@ -197,6 +197,9 @@ isofs_normalize_block_and_offset(struct iso_directory_record* de,
 	}
 }
 
+struct file_kattr;
+int isofs_fileattr_get(struct dentry *dentry, struct file_kattr *fa);
+
 extern const struct inode_operations isofs_dir_inode_operations;
 extern const struct file_operations isofs_dir_operations;
 extern const struct address_space_operations isofs_symlink_aops;

-- 
2.53.0


WARNING: multiple messages have this Message-ID (diff)
From: Chuck Lever via Linux-f2fs-devel <linux-f2fs-devel@lists.sourceforge.net>
To: Al Viro <viro@zeniv.linux.org.uk>,
	 Christian Brauner <brauner@kernel.org>, Jan Kara <jack@suse.cz>
Cc: pc@manguebit.org, yuezhang.mo@sony.com, cem@kernel.org,
	Roland Mainz <roland.mainz@nrubsig.org>,
	almaz.alexandrovich@paragon-software.com,
	adilger.kernel@dilger.ca, linux-cifs@vger.kernel.org,
	sfrench@samba.org, slava@dubeyko.com, linux-ext4@vger.kernel.org,
	linkinjeon@kernel.org, sprasad@microsoft.com, frank.li@vivo.com,
	ronniesahlberg@gmail.com, glaubitz@physik.fu-berlin.de,
	jaegeuk@kernel.org, hirofumi@mail.parknet.co.jp,
	linux-nfs@vger.kernel.org, tytso@mit.edu,
	linux-api@vger.kernel.org,
	linux-f2fs-devel@lists.sourceforge.net,
	linux-xfs@vger.kernel.org, senozhatsky@chromium.org,
	Chuck Lever <chuck.lever@oracle.com>,
	hansg@kernel.org, anna@kernel.org, linux-fsdevel@vger.kernel.org,
	sj1557.seo@samsung.com, trondmy@kernel.org
Subject: [f2fs-dev] [PATCH v14 12/15] isofs: Implement fileattr_get for case sensitivity
Date: Thu, 07 May 2026 04:53:05 -0400	[thread overview]
Message-ID: <20260507-case-sensitivity-v14-12-e62cc8200435@oracle.com> (raw)
In-Reply-To: <20260507-case-sensitivity-v14-0-e62cc8200435@oracle.com>

From: Chuck Lever <chuck.lever@oracle.com>

Upper layers such as NFSD need a way to query whether a
filesystem handles filenames in a case-sensitive manner so
they can provide correct semantics to remote clients. Without
this information, NFS exports of ISO 9660 filesystems cannot
advertise their filename case behavior.

Implement isofs_fileattr_get() to report ISO 9660 case handling
behavior. The 'check=r' (relaxed) mount option enables
case-insensitive lookups and is reported via FS_XFLAG_CASEFOLD.
By default, Joliet extensions operate in relaxed mode while
plain ISO 9660 uses strict (case-sensitive) mode.

Plain ISO 9660 names on the medium are uppercase. When neither
Rock Ridge nor Joliet is in effect, the default 'map=n' option
(and 'map=a') routes lookup and readdir through
isofs_name_translate(), which forces A-Z to a-z. The names
visible to userspace then differ in case from the on-disc form,
so report FS_XFLAG_CASENONPRESERVING in that configuration. Rock
Ridge and Joliet both deliver names as authored, and 'map=o'
emits the raw on-disc name unchanged, so those configurations
remain case-preserving.

Casefolding is a directory property, and the in-tree consumers
(NFSD, ksmbd) issue the query against a directory: NFSD walks
to the parent for non-directory dentries before calling
vfs_fileattr_get(), and ksmbd reports per-share attributes from
the share root. Wire .fileattr_get only on
isofs_dir_inode_operations. The CASEFOLD flag is set in both
fa->fsx_xflags and fa->flags so FS_IOC_FSGETXATTR and
FS_IOC_GETFLAGS agree.

Reviewed-by: Jan Kara <jack@suse.cz>
Reviewed-by: Roland Mainz <roland.mainz@nrubsig.org>
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
---
 fs/isofs/dir.c   | 16 ++++++++++++++++
 fs/isofs/isofs.h |  3 +++
 2 files changed, 19 insertions(+)

diff --git a/fs/isofs/dir.c b/fs/isofs/dir.c
index 2fd9948d606e..55385a72a4ce 100644
--- a/fs/isofs/dir.c
+++ b/fs/isofs/dir.c
@@ -14,6 +14,7 @@
 #include <linux/gfp.h>
 #include <linux/filelock.h>
 #include "isofs.h"
+#include <linux/fileattr.h>
 
 int isofs_name_translate(struct iso_directory_record *de, char *new, struct inode *inode)
 {
@@ -267,6 +268,20 @@ static int isofs_readdir(struct file *file, struct dir_context *ctx)
 	return result;
 }
 
+int isofs_fileattr_get(struct dentry *dentry, struct file_kattr *fa)
+{
+	struct isofs_sb_info *sbi = ISOFS_SB(dentry->d_sb);
+
+	if (sbi->s_check == 'r') {
+		fa->fsx_xflags |= FS_XFLAG_CASEFOLD;
+		fa->flags |= FS_CASEFOLD_FL;
+	}
+	if (!sbi->s_joliet_level && !sbi->s_rock &&
+	    (sbi->s_mapping == 'n' || sbi->s_mapping == 'a'))
+		fa->fsx_xflags |= FS_XFLAG_CASENONPRESERVING;
+	return 0;
+}
+
 const struct file_operations isofs_dir_operations =
 {
 	.llseek = generic_file_llseek,
@@ -281,6 +296,7 @@ const struct file_operations isofs_dir_operations =
 const struct inode_operations isofs_dir_inode_operations =
 {
 	.lookup = isofs_lookup,
+	.fileattr_get = isofs_fileattr_get,
 };
 
 
diff --git a/fs/isofs/isofs.h b/fs/isofs/isofs.h
index 506555837533..0ec8b24a42ed 100644
--- a/fs/isofs/isofs.h
+++ b/fs/isofs/isofs.h
@@ -197,6 +197,9 @@ isofs_normalize_block_and_offset(struct iso_directory_record* de,
 	}
 }
 
+struct file_kattr;
+int isofs_fileattr_get(struct dentry *dentry, struct file_kattr *fa);
+
 extern const struct inode_operations isofs_dir_inode_operations;
 extern const struct file_operations isofs_dir_operations;
 extern const struct address_space_operations isofs_symlink_aops;

-- 
2.53.0



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

  parent reply	other threads:[~2026-05-07  8:54 UTC|newest]

Thread overview: 60+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-05-07  8:52 [PATCH v14 00/15] Exposing case folding behavior Chuck Lever
2026-05-07  8:52 ` [f2fs-dev] " Chuck Lever via Linux-f2fs-devel
2026-05-07  8:52 ` [PATCH v14 01/15] fs: Move file_kattr initialization to callers Chuck Lever
2026-05-07  8:52   ` [f2fs-dev] " Chuck Lever via Linux-f2fs-devel
2026-05-07  8:52 ` [PATCH v14 02/15] fs: Add case sensitivity flags to file_kattr Chuck Lever
2026-05-07  8:52   ` [f2fs-dev] " Chuck Lever via Linux-f2fs-devel
2026-05-07  8:52 ` [PATCH v14 03/15] fat: Implement fileattr_get for case sensitivity Chuck Lever
2026-05-07  8:52   ` [f2fs-dev] " Chuck Lever via Linux-f2fs-devel
2026-05-20 14:31   ` Mark Brown
2026-05-20 14:39     ` Chuck Lever
2026-05-20 14:39       ` [f2fs-dev] " Chuck Lever via Linux-f2fs-devel
2026-05-20 14:54       ` Mark Brown
2026-05-20 15:12         ` Chuck Lever
2026-05-20 15:12           ` [f2fs-dev] " Chuck Lever via Linux-f2fs-devel
2026-05-20 15:19           ` Mark Brown
2026-05-20 16:58             ` Chuck Lever
2026-05-20 16:58               ` [f2fs-dev] " Chuck Lever via Linux-f2fs-devel
2026-05-20 17:11               ` Mark Brown
2026-05-20 17:30                 ` Chuck Lever
2026-05-20 17:30                   ` [f2fs-dev] " Chuck Lever via Linux-f2fs-devel
2026-05-07  8:52 ` [PATCH v14 04/15] exfat: " Chuck Lever
2026-05-07  8:52   ` [f2fs-dev] " Chuck Lever via Linux-f2fs-devel
2026-05-07  8:52 ` [PATCH v14 05/15] ntfs3: " Chuck Lever
2026-05-07  8:52   ` [f2fs-dev] " Chuck Lever via Linux-f2fs-devel
2026-05-07  8:52 ` [PATCH v14 06/15] hfs: " Chuck Lever
2026-05-07  8:52   ` [f2fs-dev] " Chuck Lever via Linux-f2fs-devel
2026-05-07  8:53 ` [PATCH v14 07/15] hfsplus: Report case sensitivity in fileattr_get Chuck Lever
2026-05-07  8:53   ` [f2fs-dev] " Chuck Lever via Linux-f2fs-devel
2026-05-07  8:53 ` [PATCH v14 08/15] xfs: " Chuck Lever
2026-05-07  8:53   ` [f2fs-dev] " Chuck Lever via Linux-f2fs-devel
2026-05-07  8:53 ` [PATCH v14 09/15] cifs: Implement fileattr_get for case sensitivity Chuck Lever
2026-05-07  8:53   ` [f2fs-dev] " Chuck Lever via Linux-f2fs-devel
2026-05-07  8:53 ` [PATCH v14 10/15] nfs: " Chuck Lever
2026-05-07  8:53   ` [f2fs-dev] " Chuck Lever via Linux-f2fs-devel
2026-05-07  8:53 ` [PATCH v14 11/15] vboxsf: " Chuck Lever
2026-05-07  8:53   ` [f2fs-dev] " Chuck Lever via Linux-f2fs-devel
2026-05-07  8:53 ` Chuck Lever [this message]
2026-05-07  8:53   ` [f2fs-dev] [PATCH v14 12/15] isofs: " Chuck Lever via Linux-f2fs-devel
2026-05-07  8:53 ` [PATCH v14 13/15] nfsd: Report export case-folding via NFSv3 PATHCONF Chuck Lever
2026-05-07  8:53   ` [f2fs-dev] " Chuck Lever via Linux-f2fs-devel
2026-05-07  8:53 ` [PATCH v14 14/15] nfsd: Implement NFSv4 FATTR4_CASE_INSENSITIVE and FATTR4_CASE_PRESERVING Chuck Lever
2026-05-07  8:53   ` [f2fs-dev] " Chuck Lever via Linux-f2fs-devel
2026-05-07  8:53 ` [PATCH v14 15/15] ksmbd: Report filesystem case sensitivity via FS_ATTRIBUTE_INFORMATION Chuck Lever
2026-05-07  8:53   ` [f2fs-dev] " Chuck Lever via Linux-f2fs-devel
2026-05-11 14:02 ` [PATCH v14 00/15] Exposing case folding behavior Christian Brauner
2026-05-11 14:02   ` [f2fs-dev] " Christian Brauner via Linux-f2fs-devel
2026-05-11 14:07   ` Chuck Lever
2026-05-11 14:07     ` [f2fs-dev] " Chuck Lever via Linux-f2fs-devel
2026-05-11 14:55     ` Christian Brauner
2026-05-11 14:55       ` [f2fs-dev] " Christian Brauner via Linux-f2fs-devel
2026-05-16  6:43   ` Cedric Blancher
2026-05-16  6:43     ` [f2fs-dev] " Cedric Blancher
2026-05-16 14:48     ` Chuck Lever
2026-05-16 14:48       ` [f2fs-dev] " Chuck Lever via Linux-f2fs-devel
2026-05-11 14:02 ` Christian Brauner
2026-05-11 14:02   ` [f2fs-dev] " Christian Brauner via Linux-f2fs-devel
2026-05-11 14:55 ` Christian Brauner
2026-05-11 14:55   ` [f2fs-dev] " Christian Brauner via Linux-f2fs-devel
2026-06-24  8:59 ` patchwork-bot+f2fs
2026-06-24  8:59   ` patchwork-bot+f2fs--- via Linux-f2fs-devel

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=20260507-case-sensitivity-v14-12-e62cc8200435@oracle.com \
    --to=cel@kernel.org \
    --cc=adilger.kernel@dilger.ca \
    --cc=almaz.alexandrovich@paragon-software.com \
    --cc=anna@kernel.org \
    --cc=brauner@kernel.org \
    --cc=cem@kernel.org \
    --cc=chao@kernel.org \
    --cc=chuck.lever@oracle.com \
    --cc=frank.li@vivo.com \
    --cc=glaubitz@physik.fu-berlin.de \
    --cc=hansg@kernel.org \
    --cc=hirofumi@mail.parknet.co.jp \
    --cc=jack@suse.cz \
    --cc=jaegeuk@kernel.org \
    --cc=linkinjeon@kernel.org \
    --cc=linux-api@vger.kernel.org \
    --cc=linux-cifs@vger.kernel.org \
    --cc=linux-ext4@vger.kernel.org \
    --cc=linux-f2fs-devel@lists.sourceforge.net \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-nfs@vger.kernel.org \
    --cc=linux-xfs@vger.kernel.org \
    --cc=pc@manguebit.org \
    --cc=roland.mainz@nrubsig.org \
    --cc=ronniesahlberg@gmail.com \
    --cc=senozhatsky@chromium.org \
    --cc=sfrench@samba.org \
    --cc=sj1557.seo@samsung.com \
    --cc=slava@dubeyko.com \
    --cc=sprasad@microsoft.com \
    --cc=trondmy@kernel.org \
    --cc=tytso@mit.edu \
    --cc=viro@zeniv.linux.org.uk \
    --cc=yuezhang.mo@sony.com \
    /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.