linux 6.2 compat: get_acl() got moved to get_inode_acl() in 6.2

Linux 6.2 renamed the get_acl() operation to get_inode_acl() in
the inode_operations struct. This should fix Issue #14323.

Reviewed-by: Richard Yao <richard.yao@alumni.stonybrook.edu>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed-by: Tony Hutter <hutter2@llnl.gov>
Signed-off-by: Coleman Kane <ckane@colemankane.org>
Closes #14323
Closes #14331
This commit is contained in:
Coleman Kane 2022-12-26 22:04:34 -05:00 committed by Brian Behlendorf
parent 138d2b29dd
commit b586ea5d93
4 changed files with 32 additions and 3 deletions

View File

@ -189,6 +189,18 @@ AC_DEFUN([ZFS_AC_KERNEL_SRC_INODE_OPERATIONS_GET_ACL], [
.get_acl = get_acl_fn, .get_acl = get_acl_fn,
}; };
],[]) ],[])
ZFS_LINUX_TEST_SRC([inode_operations_get_inode_acl], [
#include <linux/fs.h>
struct posix_acl *get_inode_acl_fn(struct inode *inode, int type,
bool rcu) { return NULL; }
static const struct inode_operations
iops __attribute__ ((unused)) = {
.get_inode_acl = get_inode_acl_fn,
};
],[])
]) ])
AC_DEFUN([ZFS_AC_KERNEL_INODE_OPERATIONS_GET_ACL], [ AC_DEFUN([ZFS_AC_KERNEL_INODE_OPERATIONS_GET_ACL], [
@ -201,7 +213,12 @@ AC_DEFUN([ZFS_AC_KERNEL_INODE_OPERATIONS_GET_ACL], [
AC_MSG_RESULT(yes) AC_MSG_RESULT(yes)
AC_DEFINE(HAVE_GET_ACL_RCU, 1, [iops->get_acl() takes rcu]) AC_DEFINE(HAVE_GET_ACL_RCU, 1, [iops->get_acl() takes rcu])
],[ ],[
ZFS_LINUX_TEST_ERROR([iops->get_acl()]) ZFS_LINUX_TEST_RESULT([inode_operations_get_inode_acl], [
AC_MSG_RESULT(yes)
AC_DEFINE(HAVE_GET_INODE_ACL, 1, [has iops->get_inode_acl()])
],[
ZFS_LINUX_TEST_ERROR([iops->get_acl() or iops->get_inode_acl()])
])
]) ])
]) ])
]) ])

View File

@ -71,7 +71,7 @@ extern int zpl_set_acl(struct user_namespace *userns, struct inode *ip,
extern int zpl_set_acl(struct inode *ip, struct posix_acl *acl, int type); extern int zpl_set_acl(struct inode *ip, struct posix_acl *acl, int type);
#endif /* HAVE_SET_ACL_USERNS */ #endif /* HAVE_SET_ACL_USERNS */
#endif /* HAVE_SET_ACL */ #endif /* HAVE_SET_ACL */
#if defined(HAVE_GET_ACL_RCU) #if defined(HAVE_GET_ACL_RCU) || defined(HAVE_GET_INODE_ACL)
extern struct posix_acl *zpl_get_acl(struct inode *ip, int type, bool rcu); extern struct posix_acl *zpl_get_acl(struct inode *ip, int type, bool rcu);
#elif defined(HAVE_GET_ACL) #elif defined(HAVE_GET_ACL)
extern struct posix_acl *zpl_get_acl(struct inode *ip, int type); extern struct posix_acl *zpl_get_acl(struct inode *ip, int type);

View File

@ -726,7 +726,11 @@ const struct inode_operations zpl_inode_operations = {
#if defined(HAVE_SET_ACL) #if defined(HAVE_SET_ACL)
.set_acl = zpl_set_acl, .set_acl = zpl_set_acl,
#endif /* HAVE_SET_ACL */ #endif /* HAVE_SET_ACL */
#if defined(HAVE_GET_INODE_ACL)
.get_inode_acl = zpl_get_acl,
#else
.get_acl = zpl_get_acl, .get_acl = zpl_get_acl,
#endif /* HAVE_GET_INODE_ACL */
#endif /* CONFIG_FS_POSIX_ACL */ #endif /* CONFIG_FS_POSIX_ACL */
}; };
@ -759,7 +763,11 @@ const struct inode_operations zpl_dir_inode_operations = {
#if defined(HAVE_SET_ACL) #if defined(HAVE_SET_ACL)
.set_acl = zpl_set_acl, .set_acl = zpl_set_acl,
#endif /* HAVE_SET_ACL */ #endif /* HAVE_SET_ACL */
#if defined(HAVE_GET_INODE_ACL)
.get_inode_acl = zpl_get_acl,
#else
.get_acl = zpl_get_acl, .get_acl = zpl_get_acl,
#endif /* HAVE_GET_INODE_ACL */
#endif /* CONFIG_FS_POSIX_ACL */ #endif /* CONFIG_FS_POSIX_ACL */
}; };
@ -798,6 +806,10 @@ const struct inode_operations zpl_special_inode_operations = {
#if defined(HAVE_SET_ACL) #if defined(HAVE_SET_ACL)
.set_acl = zpl_set_acl, .set_acl = zpl_set_acl,
#endif /* HAVE_SET_ACL */ #endif /* HAVE_SET_ACL */
#if defined(HAVE_GET_INODE_ACL)
.get_inode_acl = zpl_get_acl,
#else
.get_acl = zpl_get_acl, .get_acl = zpl_get_acl,
#endif /* HAVE_GET_INODE_ACL */
#endif /* CONFIG_FS_POSIX_ACL */ #endif /* CONFIG_FS_POSIX_ACL */
}; };

View File

@ -1067,7 +1067,7 @@ zpl_get_acl_impl(struct inode *ip, int type)
return (acl); return (acl);
} }
#if defined(HAVE_GET_ACL_RCU) #if defined(HAVE_GET_ACL_RCU) || defined(HAVE_GET_INODE_ACL)
struct posix_acl * struct posix_acl *
zpl_get_acl(struct inode *ip, int type, bool rcu) zpl_get_acl(struct inode *ip, int type, bool rcu)
{ {