From: Chuck Lever <cel@kernel.org>
To: Al Viro <viro@zeniv.linux.org.uk>,
Christian Brauner <brauner@kernel.org>
Cc: <linux-fsdevel@vger.kernel.org>,
linux-ext4@vger.kernel.org, <linux-nfs@vger.kernel.org>,
<linux-kernel@vger.kernel.org>,
hirofumi@mail.parknet.co.jp,
almaz.alexandrovich@paragon-software.com, tytso@mit.edu,
adilger.kernel@dilger.ca, Volker.Lendecke@sernet.de,
Chuck Lever <chuck.lever@oracle.com>
Subject: [PATCH v2 6/6] nfsd: Implement NFSv4 FATTR4_CASE_INSENSITIVE and FATTR4_CASE_PRESERVING
Date: Thu, 11 Dec 2025 10:21:16 -0500 [thread overview]
Message-ID: <20251211152116.480799-7-cel@kernel.org> (raw)
In-Reply-To: <20251211152116.480799-1-cel@kernel.org>
From: Chuck Lever <chuck.lever@oracle.com>
Replace the hard-coded values for the NFSv4 case_insensitive and
case_preserving attributes with dynamic values retrieved from the
underlying filesystem via vfs_get_case_info().
This allows NFSv4 clients to discover the actual case sensitivity
behavior of exported filesystems, including per-directory settings
for filesystems like ext4 with casefold support.
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
---
fs/nfsd/nfs4xdr.c | 30 ++++++++++++++++++++++++++----
1 file changed, 26 insertions(+), 4 deletions(-)
diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c
index 67bb9c0b9fcb..0c51d390d995 100644
--- a/fs/nfsd/nfs4xdr.c
+++ b/fs/nfsd/nfs4xdr.c
@@ -2933,6 +2933,8 @@ struct nfsd4_fattr_args {
u32 rdattr_err;
bool contextsupport;
bool ignore_crossmnt;
+ bool case_insensitive;
+ bool case_preserving;
};
typedef __be32(*nfsd4_enc_attr)(struct xdr_stream *xdr,
@@ -3131,6 +3133,18 @@ static __be32 nfsd4_encode_fattr4_acl(struct xdr_stream *xdr,
return nfs_ok;
}
+static __be32 nfsd4_encode_fattr4_case_insensitive(struct xdr_stream *xdr,
+ const struct nfsd4_fattr_args *args)
+{
+ return nfsd4_encode_bool(xdr, args->case_insensitive);
+}
+
+static __be32 nfsd4_encode_fattr4_case_preserving(struct xdr_stream *xdr,
+ const struct nfsd4_fattr_args *args)
+{
+ return nfsd4_encode_bool(xdr, args->case_preserving);
+}
+
static __be32 nfsd4_encode_fattr4_filehandle(struct xdr_stream *xdr,
const struct nfsd4_fattr_args *args)
{
@@ -3482,8 +3496,8 @@ static const nfsd4_enc_attr nfsd4_enc_fattr4_encode_ops[] = {
[FATTR4_ACLSUPPORT] = nfsd4_encode_fattr4_aclsupport,
[FATTR4_ARCHIVE] = nfsd4_encode_fattr4__noop,
[FATTR4_CANSETTIME] = nfsd4_encode_fattr4__true,
- [FATTR4_CASE_INSENSITIVE] = nfsd4_encode_fattr4__false,
- [FATTR4_CASE_PRESERVING] = nfsd4_encode_fattr4__true,
+ [FATTR4_CASE_INSENSITIVE] = nfsd4_encode_fattr4_case_insensitive,
+ [FATTR4_CASE_PRESERVING] = nfsd4_encode_fattr4_case_preserving,
[FATTR4_CHOWN_RESTRICTED] = nfsd4_encode_fattr4__true,
[FATTR4_FILEHANDLE] = nfsd4_encode_fattr4_filehandle,
[FATTR4_FILEID] = nfsd4_encode_fattr4_fileid,
@@ -3669,8 +3683,9 @@ nfsd4_encode_fattr4(struct svc_rqst *rqstp, struct xdr_stream *xdr,
if (err)
goto out_nfserr;
}
- if ((attrmask[0] & (FATTR4_WORD0_FILEHANDLE | FATTR4_WORD0_FSID)) &&
- !fhp) {
+ if ((attrmask[0] & (FATTR4_WORD0_FILEHANDLE | FATTR4_WORD0_FSID |
+ FATTR4_WORD0_CASE_INSENSITIVE |
+ FATTR4_WORD0_CASE_PRESERVING)) && !fhp) {
tempfh = kmalloc(sizeof(struct svc_fh), GFP_KERNEL);
status = nfserr_jukebox;
if (!tempfh)
@@ -3682,6 +3697,13 @@ nfsd4_encode_fattr4(struct svc_rqst *rqstp, struct xdr_stream *xdr,
args.fhp = tempfh;
} else
args.fhp = fhp;
+ if (attrmask[0] & (FATTR4_WORD0_CASE_INSENSITIVE |
+ FATTR4_WORD0_CASE_PRESERVING)) {
+ status = nfsd_get_case_info(args.fhp, &args.case_insensitive,
+ &args.case_preserving);
+ if (status != nfs_ok)
+ goto out;
+ }
if (attrmask[0] & FATTR4_WORD0_ACL) {
err = nfsd4_get_nfs4_acl(rqstp, dentry, &args.acl);
--
2.52.0
next prev parent reply other threads:[~2025-12-11 15:21 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-12-11 15:21 [PATCH v2 0/6] Exposing case folding behavior Chuck Lever
2025-12-11 15:21 ` [PATCH v2 1/6] fs: Add case sensitivity info to file_kattr Chuck Lever
2025-12-11 23:41 ` Eric Biggers
2025-12-12 1:16 ` Chuck Lever
2025-12-12 2:18 ` Theodore Tso
2025-12-12 15:08 ` Chuck Lever
2025-12-12 21:23 ` Theodore Tso
2025-12-12 22:49 ` Trond Myklebust
2025-12-13 16:43 ` Chuck Lever
2025-12-15 12:37 ` Christian Brauner
2025-12-11 15:21 ` [PATCH v2 2/6] fat: Implement fileattr_get for case sensitivity Chuck Lever
2025-12-12 4:42 ` OGAWA Hirofumi
2025-12-11 15:21 ` [PATCH v2 3/6] ntfs3: " Chuck Lever
2025-12-11 15:21 ` [PATCH v2 4/6] ext4: Report case sensitivity in fileattr_get Chuck Lever
2025-12-11 15:21 ` [PATCH v2 5/6] nfsd: Report export case-folding via NFSv3 PATHCONF Chuck Lever
2025-12-11 15:21 ` Chuck Lever [this message]
2025-12-12 5:20 ` [PATCH v2 0/6] Exposing case folding behavior Christoph Hellwig
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=20251211152116.480799-7-cel@kernel.org \
--to=cel@kernel.org \
--cc=Volker.Lendecke@sernet.de \
--cc=adilger.kernel@dilger.ca \
--cc=almaz.alexandrovich@paragon-software.com \
--cc=brauner@kernel.org \
--cc=chuck.lever@oracle.com \
--cc=hirofumi@mail.parknet.co.jp \
--cc=linux-ext4@vger.kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-nfs@vger.kernel.org \
--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 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.