On 6/7/25 6:39 PM, Theodore Ts'o wrote: > On Sat, Jun 07, 2025 at 02:30:37PM -0400, Chuck Lever wrote: >> >> My impression is that real case-insensitivity has been added to the >> dentry cache in support of FAT on Android devices (or something like >> that). That clears the path a bit for NFSD, but it needs to be >> researched to see if that new support is adequate for NFS to use. > > Case insensitivty was added in Linux in 2019, with the primary coding > work being done by Gabriel Krisman Bertazi of Collabora, and design > work being done being done by Gabriel, Michael Halcrow, and myself. > (Michael Halcrow in particular was responsible for devising how to > make case-insensitivity work with filename encryption and indexed > directories.) For some reason I thought case-insensitivity support was merged more recently than that. I recall it first appearing as a session at LSF in Park City, but maybe that one was in 2018. > There is an interesting write-up about NFS and case-insensitivity in a > relatively recent Internet-Draft[1], dated 2025-May-16. In this I-D, > it points out that one of the primary concerns is that if the client > caches negative lookups under one case (say, MaDNeSS), and then the > file is created using a different case (say "madness"), then the > negative dentry cache indicating that MaDNeSS does not exist needs to > be removed when "madness" is created. I'm not sure how Linux's NFS > client handles negative dentries, since even without > case-insensitivity, a file name that previously didn't exist could > have subsequently been created by another client on a different host. > So does Linux's NFS client simply does not use negative dentries, or > does it have some kind of cache invalidation scheme when the directory > has a new mtime, or some such? > > [1] https://www.ietf.org/id/draft-ietf-nfsv4-internationalization-12.html#name-handling-of-string-equivale nfs(5) describes the lookupcache= mount option. It controls how the Linux NFS client caches positive and negative lookup results. -- Chuck Lever