mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-07-22 03:27:30 -04:00
fs: Add case sensitivity flags to file_kattr
Enable upper layers such as NFSD to retrieve case sensitivity information from file systems by adding FS_XFLAG_CASEFOLD and FS_XFLAG_CASENONPRESERVING flags. Filesystems report case-insensitive or case-nonpreserving behavior by setting these flags directly in fa->fsx_xflags. The default (flags unset) indicates POSIX semantics: case-sensitive and case-preserving. Both flags are added to FS_XFLAG_RDONLY_MASK so FS_IOC_FSSETXATTR silently strips them, keeping the new xflags strictly a reporting interface. Callers that want to toggle casefolding continue to use FS_IOC_SETFLAGS with FS_CASEFOLD_FL, the established UAPI on filesystems that support the operation (ext4 and f2fs on empty directories). Case sensitivity information is exported to userspace via the fa_xflags field in the FS_IOC_FSGETXATTR ioctl and file_getattr() system call. Reviewed-by: "Darrick J. Wong" <djwong@kernel.org> Reviewed-by: Jan Kara <jack@suse.cz> Reviewed-by: Roland Mainz <roland.mainz@nrubsig.org> Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Link: https://patch.msgid.link/20260507-case-sensitivity-v14-2-e62cc8200435@oracle.com Signed-off-by: Christian Brauner <brauner@kernel.org>
This commit is contained in:
committed by
Christian Brauner
parent
14c3197ecf
commit
3035e44541
@@ -37,6 +37,8 @@ void fileattr_fill_xflags(struct file_kattr *fa, u32 xflags)
|
||||
fa->flags |= FS_PROJINHERIT_FL;
|
||||
if (fa->fsx_xflags & FS_XFLAG_VERITY)
|
||||
fa->flags |= FS_VERITY_FL;
|
||||
if (fa->fsx_xflags & FS_XFLAG_CASEFOLD)
|
||||
fa->flags |= FS_CASEFOLD_FL;
|
||||
}
|
||||
EXPORT_SYMBOL(fileattr_fill_xflags);
|
||||
|
||||
@@ -67,6 +69,8 @@ void fileattr_fill_flags(struct file_kattr *fa, u32 flags)
|
||||
fa->fsx_xflags |= FS_XFLAG_PROJINHERIT;
|
||||
if (fa->flags & FS_VERITY_FL)
|
||||
fa->fsx_xflags |= FS_XFLAG_VERITY;
|
||||
if (fa->flags & FS_CASEFOLD_FL)
|
||||
fa->fsx_xflags |= FS_XFLAG_CASEFOLD;
|
||||
}
|
||||
EXPORT_SYMBOL(fileattr_fill_flags);
|
||||
|
||||
|
||||
@@ -16,7 +16,8 @@
|
||||
|
||||
/* Read-only inode flags */
|
||||
#define FS_XFLAG_RDONLY_MASK \
|
||||
(FS_XFLAG_PREALLOC | FS_XFLAG_HASATTR | FS_XFLAG_VERITY)
|
||||
(FS_XFLAG_PREALLOC | FS_XFLAG_HASATTR | FS_XFLAG_VERITY | \
|
||||
FS_XFLAG_CASEFOLD | FS_XFLAG_CASENONPRESERVING)
|
||||
|
||||
/* Flags to indicate valid value of fsx_ fields */
|
||||
#define FS_XFLAG_VALUES_MASK \
|
||||
|
||||
@@ -254,6 +254,13 @@ struct file_attr {
|
||||
#define FS_XFLAG_DAX 0x00008000 /* use DAX for IO */
|
||||
#define FS_XFLAG_COWEXTSIZE 0x00010000 /* CoW extent size allocator hint */
|
||||
#define FS_XFLAG_VERITY 0x00020000 /* fs-verity enabled */
|
||||
/*
|
||||
* Case handling flags (read-only, cannot be set via ioctl).
|
||||
* Default (neither set) indicates POSIX semantics: case-sensitive
|
||||
* lookups and case-preserving storage.
|
||||
*/
|
||||
#define FS_XFLAG_CASEFOLD 0x00040000 /* case-insensitive lookups */
|
||||
#define FS_XFLAG_CASENONPRESERVING 0x00080000 /* case not preserved */
|
||||
#define FS_XFLAG_HASATTR 0x80000000 /* no DIFLAG for this */
|
||||
|
||||
/* the read-only stuff doesn't really belong here, but any other place is
|
||||
|
||||
Reference in New Issue
Block a user