Merge pull request #227 from versity/auke/el96

RHEL 9.6 support.
This commit is contained in:
Zach Brown
2025-10-30 13:39:05 -07:00
committed by GitHub
6 changed files with 60 additions and 1 deletions

View File

@@ -278,6 +278,14 @@ ifneq (,$(shell grep 'int ..mknod. .struct user_namespace' include/linux/fs.h))
ccflags-y += -DKC_VFS_METHOD_USER_NAMESPACE_ARG ccflags-y += -DKC_VFS_METHOD_USER_NAMESPACE_ARG
endif endif
#
# v6.2-rc1-2-gabf08576afe3
#
# fs: vfs methods use struct mnt_idmap instead of struct user_namespace
ifneq (,$(shell grep 'int vfs_mknod.struct mnt_idmap' include/linux/fs.h))
ccflags-y += -DKC_VFS_METHOD_MNT_IDMAP_ARG
endif
# #
# v5.17-rc2-21-g07888c665b40 # v5.17-rc2-21-g07888c665b40
# #
@@ -470,3 +478,11 @@ endif
ifneq (,$(shell grep '^unsigned int stack_trace_save' include/linux/stacktrace.h)) ifneq (,$(shell grep '^unsigned int stack_trace_save' include/linux/stacktrace.h))
ccflags-y += -DKC_STACK_TRACE_SAVE ccflags-y += -DKC_STACK_TRACE_SAVE
endif endif
# v6.1-rc1-4-g7420332a6ff4
#
# .get_acl() method now has dentry arg (and mnt_idmap). The old get_acl has been renamed
# to get_inode_acl() and is still available as well, but has an extra rcu param.
ifneq (,$(shell grep 'struct posix_acl ...get_acl..struct mnt_idmap ., struct dentry' include/linux/fs.h))
ccflags-y += -DKC_GET_ACL_DENTRY
endif

View File

@@ -107,8 +107,15 @@ struct posix_acl *scoutfs_get_acl_locked(struct inode *inode, int type, struct s
return acl; return acl;
} }
#ifdef KC_GET_ACL_DENTRY
struct posix_acl *scoutfs_get_acl(KC_VFS_NS_DEF
struct dentry *dentry, int type)
{
struct inode *inode = dentry->d_inode;
#else
struct posix_acl *scoutfs_get_acl(struct inode *inode, int type) struct posix_acl *scoutfs_get_acl(struct inode *inode, int type)
{ {
#endif
struct super_block *sb = inode->i_sb; struct super_block *sb = inode->i_sb;
struct scoutfs_lock *lock = NULL; struct scoutfs_lock *lock = NULL;
struct posix_acl *acl; struct posix_acl *acl;
@@ -201,8 +208,15 @@ out:
return ret; return ret;
} }
#ifdef KC_GET_ACL_DENTRY
int scoutfs_set_acl(KC_VFS_NS_DEF
struct dentry *dentry, struct posix_acl *acl, int type)
{
struct inode *inode = dentry->d_inode;
#else
int scoutfs_set_acl(struct inode *inode, struct posix_acl *acl, int type) int scoutfs_set_acl(struct inode *inode, struct posix_acl *acl, int type)
{ {
#endif
struct super_block *sb = inode->i_sb; struct super_block *sb = inode->i_sb;
struct scoutfs_lock *lock = NULL; struct scoutfs_lock *lock = NULL;
LIST_HEAD(ind_locks); LIST_HEAD(ind_locks);
@@ -240,7 +254,12 @@ int scoutfs_acl_get_xattr(struct dentry *dentry, const char *name, void *value,
if (!IS_POSIXACL(dentry->d_inode)) if (!IS_POSIXACL(dentry->d_inode))
return -EOPNOTSUPP; return -EOPNOTSUPP;
#ifdef KC_GET_ACL_DENTRY
acl = scoutfs_get_acl(KC_VFS_INIT_NS
dentry, type);
#else
acl = scoutfs_get_acl(dentry->d_inode, type); acl = scoutfs_get_acl(dentry->d_inode, type);
#endif
if (IS_ERR(acl)) if (IS_ERR(acl))
return PTR_ERR(acl); return PTR_ERR(acl);
if (acl == NULL) if (acl == NULL)
@@ -286,7 +305,11 @@ int scoutfs_acl_set_xattr(struct dentry *dentry, const char *name, const void *v
} }
} }
#ifdef KC_GET_ACL_DENTRY
ret = scoutfs_set_acl(KC_VFS_INIT_NS dentry, acl, type);
#else
ret = scoutfs_set_acl(dentry->d_inode, acl, type); ret = scoutfs_set_acl(dentry->d_inode, acl, type);
#endif
out: out:
posix_acl_release(acl); posix_acl_release(acl);

View File

@@ -1,9 +1,14 @@
#ifndef _SCOUTFS_ACL_H_ #ifndef _SCOUTFS_ACL_H_
#define _SCOUTFS_ACL_H_ #define _SCOUTFS_ACL_H_
#ifdef KC_GET_ACL_DENTRY
struct posix_acl *scoutfs_get_acl(KC_VFS_NS_DEF struct dentry *dentry, int type);
int scoutfs_set_acl(KC_VFS_NS_DEF struct dentry *dentry, struct posix_acl *acl, int type);
#else
struct posix_acl *scoutfs_get_acl(struct inode *inode, int type); struct posix_acl *scoutfs_get_acl(struct inode *inode, int type);
struct posix_acl *scoutfs_get_acl_locked(struct inode *inode, int type, struct scoutfs_lock *lock);
int scoutfs_set_acl(struct inode *inode, struct posix_acl *acl, int type); int scoutfs_set_acl(struct inode *inode, struct posix_acl *acl, int type);
#endif
struct posix_acl *scoutfs_get_acl_locked(struct inode *inode, int type, struct scoutfs_lock *lock);
int scoutfs_set_acl_locked(struct inode *inode, struct posix_acl *acl, int type, int scoutfs_set_acl_locked(struct inode *inode, struct posix_acl *acl, int type,
struct scoutfs_lock *lock, struct list_head *ind_locks); struct scoutfs_lock *lock, struct list_head *ind_locks);
#ifdef KC_XATTR_STRUCT_XATTR_HANDLER #ifdef KC_XATTR_STRUCT_XATTR_HANDLER

View File

@@ -2053,6 +2053,9 @@ const struct inode_operations scoutfs_dir_iops = {
#endif #endif
.listxattr = scoutfs_listxattr, .listxattr = scoutfs_listxattr,
.get_acl = scoutfs_get_acl, .get_acl = scoutfs_get_acl,
#ifdef KC_GET_ACL_DENTRY
.set_acl = scoutfs_set_acl,
#endif
.symlink = scoutfs_symlink, .symlink = scoutfs_symlink,
.permission = scoutfs_permission, .permission = scoutfs_permission,
#ifdef KC_LINUX_HAVE_RHEL_IOPS_WRAPPER #ifdef KC_LINUX_HAVE_RHEL_IOPS_WRAPPER

View File

@@ -150,6 +150,9 @@ static const struct inode_operations scoutfs_file_iops = {
#endif #endif
.listxattr = scoutfs_listxattr, .listxattr = scoutfs_listxattr,
.get_acl = scoutfs_get_acl, .get_acl = scoutfs_get_acl,
#ifdef KC_GET_ACL_DENTRY
.set_acl = scoutfs_set_acl,
#endif
.fiemap = scoutfs_data_fiemap, .fiemap = scoutfs_data_fiemap,
}; };
@@ -163,6 +166,9 @@ static const struct inode_operations scoutfs_special_iops = {
#endif #endif
.listxattr = scoutfs_listxattr, .listxattr = scoutfs_listxattr,
.get_acl = scoutfs_get_acl, .get_acl = scoutfs_get_acl,
#ifdef KC_GET_ACL_DENTRY
.set_acl = scoutfs_set_acl,
#endif
}; };
/* /*

View File

@@ -263,6 +263,11 @@ typedef unsigned int blk_opf_t;
#define kc__vmalloc __vmalloc #define kc__vmalloc __vmalloc
#endif #endif
#ifdef KC_VFS_METHOD_MNT_IDMAP_ARG
#define KC_VFS_NS_DEF struct mnt_idmap *mnt_idmap,
#define KC_VFS_NS mnt_idmap,
#define KC_VFS_INIT_NS &nop_mnt_idmap,
#else
#ifdef KC_VFS_METHOD_USER_NAMESPACE_ARG #ifdef KC_VFS_METHOD_USER_NAMESPACE_ARG
#define KC_VFS_NS_DEF struct user_namespace *mnt_user_ns, #define KC_VFS_NS_DEF struct user_namespace *mnt_user_ns,
#define KC_VFS_NS mnt_user_ns, #define KC_VFS_NS mnt_user_ns,
@@ -272,6 +277,7 @@ typedef unsigned int blk_opf_t;
#define KC_VFS_NS #define KC_VFS_NS
#define KC_VFS_INIT_NS #define KC_VFS_INIT_NS
#endif #endif
#endif /* KC_VFS_METHOD_MNT_IDMAP_ARG */
#ifdef KC_BIO_ALLOC_DEV_OPF_ARGS #ifdef KC_BIO_ALLOC_DEV_OPF_ARGS
#define kc_bio_alloc bio_alloc #define kc_bio_alloc bio_alloc