From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 4EF8030F7F9; Mon, 12 Jan 2026 17:46:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768240001; cv=none; b=AXZ+QoaAY3rOo2zBGYSDNAYIkipYtOE9khPa7p6K4tNH9ua9DcWH3nCHwc01neOl4BAZe9uG9gnU/o8ZHV5l8lr06qDVmMltIXW3kFniGP5oZBzZvXL2V6SM5d6mMJeODWvgREyN0RET7gMms0crYkxMqH3KGQQCZWNgTaw+ews= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768240001; c=relaxed/simple; bh=Vhd/gJtrTHzGsQ/Fg40yOnQHfXkavG5IIk9pHgkRG+A=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=BDZleCyTsHm1xschbuBZkW9Nqo+KoB8k1SJuSCLGQLz6Bf1uNdiiy1+S6TL2a538e7gbhOhBzX56meoVwKg6q7YXobAuagiOPqcl9Ayy7b6rdU0zWT1XPsp8JQnCDQFfcU9H+WEoZ+hSBw4nHNbGN06TzbnUhgyYloDNxINXULA= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=q9S2WVf5; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="q9S2WVf5" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 2D988C2BCB3; Mon, 12 Jan 2026 17:46:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1768239996; bh=Vhd/gJtrTHzGsQ/Fg40yOnQHfXkavG5IIk9pHgkRG+A=; h=From:To:Cc:Subject:Date:From; b=q9S2WVf5sUkHZ/fiYUqo+pNTFpgLuS1m1+j82so5SM1uWC1GzuEK4i8ZZJlhb8XYs xYdz+HG/47VRihARGgXP9b60kDGjaUh+2CaeSY2yrJp5Qx0V9Z3xklgbjMfRGK4FvM CxHqE9pGlVsjK07Slg6rVRYUVM+4wr9/bBtdInQotDAjQS6I82prq2zdaP2HBmdkTZ DRXBnyd6HpfQ1vmh6tmyBSKu6xHOx81rluCTMBlqatLn6JGd2PmUebbun3Xqp558VE JcdZGc4LcvSdMpVYk9fh9uoDGukookDopcit0KedCxOPE3+5QShDfoORlkdKB01orT w0A+HlWUE/83A== From: Chuck Lever To: vira, Christian Brauner , Jan Kara Cc: , linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-cifs@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 Subject: [PATCH v3 00/16] Exposing case folding behavior Date: Mon, 12 Jan 2026 12:46:13 -0500 Message-ID: <20260112174629.3729358-1-cel@kernel.org> X-Mailer: git-send-email 2.52.0 Precedence: bulk X-Mailing-List: linux-fsdevel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit From: Chuck Lever Following on from https://lore.kernel.org/linux-nfs/20251021-zypressen-bazillus-545a44af57fd@brauner/T/#m0ba197d75b7921d994cf284f3cef3a62abb11aaa I'm attempting to implement enough support in the Linux VFS to enable file services like NFSD and ksmbd (and user space equivalents) to provide the actual status of case folding support in local file systems. The default behavior for local file systems not explicitly supported in this series is to reflect the usual POSIX behaviors: case-insensitive = false case-preserving = true The case-insensitivity and case-preserving booleans can be consumed immediately by NFSD. These two booleans have been part of the NFSv3 and NFSv4 protocols for decades, in order to support NFS clients on non-POSIX systems. Support for user space file servers is why this series exposes case folding information via a user-space API. I don't know of any other category of user-space application that requires access to case folding info. The Linux NFS community has a growing interest in supporting NFS clients on Windows and MacOS platforms, where file name behavior does not align with traditional POSIX semantics. One example of a Windows-based NFS client is [1]. This client implementation explicitly requires servers to report FATTR4_WORD0_CASE_INSENSITIVE = TRUE for proper operation, a hard requirement for Windows client interoperability because Windows applications expect case-insensitive behavior. When an NFS client knows the server is case-insensitive, it can avoid issuing multiple LOOKUP/READDIR requests to search for case variants, and applications like Win32 programs work correctly without manual workarounds or code changes. Even the Linux client can take advantage of this information. Trond merged patches 4 years ago [2] that introduce support for case insensitivity, in support of the Hammerspace NFS server. In particular, when a client detects a case-insensitive NFS share, negative dentry caching must be disabled (a lookup for "FILE.TXT" failing shouldn't cache a negative entry when "file.txt" exists) and directory change invalidation must clear all cached case-folded file name variants. Hammerspace servers and several other NFS server implementations operate in multi-protocol environments, where a single file service instance caters to both NFS and SMB clients. In those cases, things work more smoothly for everyone when the NFS client can see and adapt to the case folding behavior that SMB users rely on and expect. NFSD needs to support the case-insensitivity and case-preserving booleans properly in order to participate as a first-class citizen in such environments. Series based on v6.19-rc5. [1] https://github.com/kofemann/ms-nfs41-client [2] https://patchwork.kernel.org/project/linux-nfs/cover/20211217203658.439352-1-trondmy@kernel.org/ --- Changes since v2: - Remove unicode labels - Replace vfs_get_case_info - Add support for several more local file system implementations - Add support for in-kernel SMB server Changes since RFC: - Use file_getattr instead of statx - Postpone exposing Unicode version until later - Support NTFS and ext4 in addition to FAT - Support NFSv4 fattr4 in addition to NFSv3 PATHCONF Chuck Lever (16): fs: Add case sensitivity info to file_kattr fat: Implement fileattr_get for case sensitivity exfat: Implement fileattr_get for case sensitivity ntfs3: Implement fileattr_get for case sensitivity hfs: Implement fileattr_get for case sensitivity hfsplus: Report case sensitivity in fileattr_get ext4: Report case sensitivity in fileattr_get xfs: Report case sensitivity in fileattr_get cifs: Implement fileattr_get for case sensitivity nfs: Implement fileattr_get for case sensitivity f2fs: Add case sensitivity reporting to fileattr_get vboxsf: Implement fileattr_get for case sensitivity isofs: Implement fileattr_get for case sensitivity nfsd: Report export case-folding via NFSv3 PATHCONF nfsd: Implement NFSv4 FATTR4_CASE_INSENSITIVE and FATTR4_CASE_PRESERVING ksmbd: Report filesystem case sensitivity via FS_ATTRIBUTE_INFORMATION fs/exfat/exfat_fs.h | 2 ++ fs/exfat/file.c | 17 +++++++++++++++-- fs/exfat/namei.c | 1 + fs/ext4/ioctl.c | 8 ++++++++ fs/f2fs/file.c | 8 ++++++++ fs/fat/fat.h | 3 +++ fs/fat/file.c | 18 ++++++++++++++++++ fs/fat/namei_msdos.c | 1 + fs/fat/namei_vfat.c | 1 + fs/file_attr.c | 10 ++++++++++ fs/hfs/dir.c | 1 + fs/hfs/hfs_fs.h | 2 ++ fs/hfs/inode.c | 13 +++++++++++++ fs/hfsplus/inode.c | 9 +++++++++ fs/isofs/dir.c | 11 +++++++++++ fs/nfs/client.c | 9 +++++++-- fs/nfs/inode.c | 18 ++++++++++++++++++ fs/nfs/internal.h | 3 +++ fs/nfs/nfs3proc.c | 2 ++ fs/nfs/nfs3xdr.c | 7 +++++-- fs/nfs/nfs4proc.c | 2 ++ fs/nfs/proc.c | 3 +++ fs/nfs/symlink.c | 3 +++ fs/nfsd/nfs3proc.c | 18 ++++++++++-------- fs/nfsd/nfs4xdr.c | 30 ++++++++++++++++++++++++++---- fs/nfsd/vfs.c | 25 +++++++++++++++++++++++++ fs/nfsd/vfs.h | 2 ++ fs/ntfs3/file.c | 23 +++++++++++++++++++++++ fs/ntfs3/inode.c | 1 + fs/ntfs3/namei.c | 2 ++ fs/ntfs3/ntfs_fs.h | 1 + fs/smb/client/cifsfs.c | 19 +++++++++++++++++++ fs/smb/server/smb2pdu.c | 30 ++++++++++++++++++++++++------ fs/vboxsf/dir.c | 1 + fs/vboxsf/file.c | 6 ++++-- fs/vboxsf/super.c | 4 ++++ fs/vboxsf/utils.c | 31 +++++++++++++++++++++++++++++++ fs/vboxsf/vfsmod.h | 6 ++++++ fs/xfs/xfs_ioctl.c | 7 +++++++ include/linux/fileattr.h | 3 +++ include/linux/nfs_xdr.h | 2 ++ 41 files changed, 337 insertions(+), 26 deletions(-) -- 2.52.0