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-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>
Subject: [PATCH v5 09/16] cifs: Implement fileattr_get for case sensitivity
Date: Fri, 16 Jan 2026 09:46:08 -0500 [thread overview]
Message-ID: <20260116144616.2098618-10-cel@kernel.org> (raw)
In-Reply-To: <20260116144616.2098618-1-cel@kernel.org>
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. The file_kattr
structure now provides case_insensitive and case_preserving fields
for this purpose, but CIFS does not yet report its case sensitivity
behavior through this interface.
Implement cifs_fileattr_get() to report CIFS/SMB case handling
behavior. CIFS servers (typically Windows or Samba) are usually
case-insensitive but case-preserving, meaning they ignore case
during lookups but store filenames exactly as provided.
The implementation reports case sensitivity based on the nocase
mount option, which reflects whether the client expects the server
to perform case-insensitive comparisons. When nocase is set, the
mount is reported as case-insensitive. The case_preserving field
is always set to true since SMB servers preserve filename case at
rest.
The callback is registered in all three inode_operations
structures (directory, file, and symlink) to ensure consistent
reporting across all inode types.
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
---
fs/smb/client/cifsfs.c | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
diff --git a/fs/smb/client/cifsfs.c b/fs/smb/client/cifsfs.c
index d9664634144d..563eece79b13 100644
--- a/fs/smb/client/cifsfs.c
+++ b/fs/smb/client/cifsfs.c
@@ -30,6 +30,7 @@
#include <linux/xattr.h>
#include <linux/mm.h>
#include <linux/key-type.h>
+#include <linux/fileattr.h>
#include <uapi/linux/magic.h>
#include <net/ipv6.h>
#include "cifsfs.h"
@@ -1193,6 +1194,20 @@ struct file_system_type smb3_fs_type = {
MODULE_ALIAS_FS("smb3");
MODULE_ALIAS("smb3");
+static int cifs_fileattr_get(struct dentry *dentry, struct file_kattr *fa)
+{
+ struct cifs_sb_info *cifs_sb = CIFS_SB(dentry->d_sb);
+ struct cifs_tcon *tcon = cifs_sb_master_tcon(cifs_sb);
+
+ /*
+ * CIFS/SMB servers are typically case-insensitive and
+ * case-preserving (the default). The nocase mount option
+ * reflects what the client expects from the server.
+ */
+ fa->case_insensitive = tcon->nocase;
+ return 0;
+}
+
const struct inode_operations cifs_dir_inode_ops = {
.create = cifs_create,
.atomic_open = cifs_atomic_open,
@@ -1210,6 +1225,7 @@ const struct inode_operations cifs_dir_inode_ops = {
.listxattr = cifs_listxattr,
.get_acl = cifs_get_acl,
.set_acl = cifs_set_acl,
+ .fileattr_get = cifs_fileattr_get,
};
const struct inode_operations cifs_file_inode_ops = {
@@ -1220,6 +1236,7 @@ const struct inode_operations cifs_file_inode_ops = {
.fiemap = cifs_fiemap,
.get_acl = cifs_get_acl,
.set_acl = cifs_set_acl,
+ .fileattr_get = cifs_fileattr_get,
};
const char *cifs_get_link(struct dentry *dentry, struct inode *inode,
@@ -1254,6 +1271,7 @@ const struct inode_operations cifs_symlink_inode_ops = {
.setattr = cifs_setattr,
.permission = cifs_permission,
.listxattr = cifs_listxattr,
+ .fileattr_get = cifs_fileattr_get,
};
/*
--
2.52.0
next prev parent reply other threads:[~2026-01-16 14:46 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-01-16 14:45 [PATCH v5 00/16] Exposing case folding behavior Chuck Lever
2026-01-16 14:46 ` [PATCH v5 01/16] fs: Add case sensitivity info to file_kattr Chuck Lever
2026-01-16 16:28 ` Darrick J. Wong
2026-01-16 14:46 ` [PATCH v5 02/16] fat: Implement fileattr_get for case sensitivity Chuck Lever
2026-01-16 14:46 ` [PATCH v5 03/16] exfat: " Chuck Lever
2026-01-16 14:46 ` [PATCH v5 04/16] ntfs3: " Chuck Lever
2026-01-16 14:46 ` [PATCH v5 05/16] hfs: " Chuck Lever
2026-01-16 14:46 ` [PATCH v5 06/16] hfsplus: Report case sensitivity in fileattr_get Chuck Lever
2026-01-16 14:46 ` [PATCH v5 07/16] ext4: " Chuck Lever
2026-01-16 14:46 ` [PATCH v5 08/16] xfs: " Chuck Lever
2026-01-16 14:46 ` Chuck Lever [this message]
2026-01-16 14:46 ` [PATCH v5 10/16] nfs: Implement fileattr_get for case sensitivity Chuck Lever
2026-01-16 14:46 ` [PATCH v5 11/16] f2fs: Add case sensitivity reporting to fileattr_get Chuck Lever
2026-01-16 14:46 ` [PATCH v5 12/16] vboxsf: Implement fileattr_get for case sensitivity Chuck Lever
2026-01-16 14:46 ` [PATCH v5 13/16] isofs: " Chuck Lever
2026-01-16 14:46 ` [PATCH v5 14/16] nfsd: Report export case-folding via NFSv3 PATHCONF Chuck Lever
2026-01-16 14:46 ` [PATCH v5 15/16] nfsd: Implement NFSv4 FATTR4_CASE_INSENSITIVE and FATTR4_CASE_PRESERVING Chuck Lever
2026-01-16 14:46 ` [PATCH v5 16/16] ksmbd: Report filesystem case sensitivity via FS_ATTRIBUTE_INFORMATION Chuck Lever
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=20260116144616.2098618-10-cel@kernel.org \
--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-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=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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox