mirror of
https://github.com/torvalds/linux.git
synced 2026-07-27 17:47:41 +02:00
hfs: Implement fileattr_get for case sensitivity
Report HFS case sensitivity behavior via the FS_XFLAG_CASEFOLD flag. HFS is always case-insensitive (using Mac OS Roman case folding) and always preserves case at rest. Reviewed-by: Viacheslav Dubeyko <slava@dubeyko.com> 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-6-e62cc8200435@oracle.com Signed-off-by: Christian Brauner <brauner@kernel.org>
This commit is contained in:
parent
eeb7b37b97
commit
b6fe046c30
|
|
@ -328,4 +328,5 @@ const struct inode_operations hfs_dir_inode_operations = {
|
|||
.rmdir = hfs_remove,
|
||||
.rename = hfs_rename,
|
||||
.setattr = hfs_inode_setattr,
|
||||
.fileattr_get = hfs_fileattr_get,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -177,6 +177,8 @@ extern int hfs_get_block(struct inode *inode, sector_t block,
|
|||
extern const struct address_space_operations hfs_aops;
|
||||
extern const struct address_space_operations hfs_btree_aops;
|
||||
|
||||
struct file_kattr;
|
||||
int hfs_fileattr_get(struct dentry *dentry, struct file_kattr *fa);
|
||||
int hfs_write_begin(const struct kiocb *iocb, struct address_space *mapping,
|
||||
loff_t pos, unsigned int len, struct folio **foliop,
|
||||
void **fsdata);
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@
|
|||
#include <linux/uio.h>
|
||||
#include <linux/xattr.h>
|
||||
#include <linux/blkdev.h>
|
||||
#include <linux/fileattr.h>
|
||||
|
||||
#include "hfs_fs.h"
|
||||
#include "btree.h"
|
||||
|
|
@ -699,6 +700,18 @@ static int hfs_file_fsync(struct file *filp, loff_t start, loff_t end,
|
|||
return ret;
|
||||
}
|
||||
|
||||
int hfs_fileattr_get(struct dentry *dentry, struct file_kattr *fa)
|
||||
{
|
||||
/*
|
||||
* HFS compares filenames using Mac OS Roman case folding, so
|
||||
* lookup is always case-insensitive. Names are stored on disk
|
||||
* with case intact; CASENONPRESERVING stays clear.
|
||||
*/
|
||||
fa->fsx_xflags |= FS_XFLAG_CASEFOLD;
|
||||
fa->flags |= FS_CASEFOLD_FL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct file_operations hfs_file_operations = {
|
||||
.llseek = generic_file_llseek,
|
||||
.read_iter = generic_file_read_iter,
|
||||
|
|
@ -715,4 +728,5 @@ static const struct inode_operations hfs_file_inode_operations = {
|
|||
.lookup = hfs_file_lookup,
|
||||
.setattr = hfs_inode_setattr,
|
||||
.listxattr = generic_listxattr,
|
||||
.fileattr_get = hfs_fileattr_get,
|
||||
};
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user