public inbox for linux-fsdevel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3 00/16] Exposing case folding behavior
@ 2026-01-12 17:46 Chuck Lever
  2026-01-12 17:46 ` [PATCH v3 01/16] fs: Add case sensitivity info to file_kattr Chuck Lever
                   ` (16 more replies)
  0 siblings, 17 replies; 30+ messages in thread
From: Chuck Lever @ 2026-01-12 17:46 UTC (permalink / raw)
  To: vira, Christian Brauner, Jan Kara
  Cc: linux-fsdevel, linux-ext4, linux-xfs, linux-cifs, linux-nfs,
	linux-f2fs-devel, hirofumi, linkinjeon, sj1557.seo, yuezhang.mo,
	almaz.alexandrovich, slava, glaubitz, frank.li, tytso,
	adilger.kernel, cem, sfrench, pc, ronniesahlberg, sprasad,
	trondmy, anna, jaegeuk, chao, hansg, senozhatsky, Chuck Lever

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

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


^ permalink raw reply	[flat|nested] 30+ messages in thread

end of thread, other threads:[~2026-01-14  0:50 UTC | newest]

Thread overview: 30+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-01-12 17:46 [PATCH v3 00/16] Exposing case folding behavior Chuck Lever
2026-01-12 17:46 ` [PATCH v3 01/16] fs: Add case sensitivity info to file_kattr Chuck Lever
2026-01-13 15:21   ` Christoph Hellwig
2026-01-12 17:46 ` [PATCH v3 02/16] fat: Implement fileattr_get for case sensitivity Chuck Lever
2026-01-13 15:23   ` Christoph Hellwig
2026-01-12 17:46 ` [PATCH v3 03/16] exfat: " Chuck Lever
2026-01-14  0:45   ` Namjae Jeon
2026-01-12 17:46 ` [PATCH v3 04/16] ntfs3: " Chuck Lever
2026-01-12 17:46 ` [PATCH v3 05/16] hfs: " Chuck Lever
2026-01-13 17:35   ` Viacheslav Dubeyko
2026-01-12 17:46 ` [PATCH v3 06/16] hfsplus: Report case sensitivity in fileattr_get Chuck Lever
2026-01-13 17:36   ` Viacheslav Dubeyko
2026-01-12 17:46 ` [PATCH v3 07/16] ext4: " Chuck Lever
2026-01-13 11:50   ` Jan Kara
2026-01-12 17:46 ` [PATCH v3 08/16] xfs: " Chuck Lever
2026-01-13 16:02   ` Darrick J. Wong
2026-01-13 16:43     ` Neal Gompa
2026-01-12 17:46 ` [PATCH v3 09/16] cifs: Implement fileattr_get for case sensitivity Chuck Lever
2026-01-12 17:46 ` [PATCH v3 10/16] nfs: " Chuck Lever
2026-01-12 17:46 ` [PATCH v3 11/16] f2fs: Add case sensitivity reporting to fileattr_get Chuck Lever
2026-01-14  0:50   ` Chao Yu
2026-01-12 17:46 ` [PATCH v3 12/16] vboxsf: Implement fileattr_get for case sensitivity Chuck Lever
2026-01-12 17:46 ` [PATCH v3 13/16] isofs: " Chuck Lever
2026-01-13 11:50   ` Jan Kara
2026-01-12 17:46 ` [PATCH v3 14/16] nfsd: Report export case-folding via NFSv3 PATHCONF Chuck Lever
2026-01-12 17:46 ` [PATCH v3 15/16] nfsd: Implement NFSv4 FATTR4_CASE_INSENSITIVE and FATTR4_CASE_PRESERVING Chuck Lever
2026-01-12 17:46 ` [PATCH v3 16/16] ksmbd: Report filesystem case sensitivity via FS_ATTRIBUTE_INFORMATION Chuck Lever
2026-01-14  0:46   ` Namjae Jeon
2026-01-13  9:04 ` [PATCH v3 00/16] Exposing case folding behavior Christian Brauner
2026-01-13 13:58   ` Chuck Lever

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox