2011-02-11 03:16:52 +03:00
|
|
|
dnl #
|
|
|
|
dnl # 2.6.35 API change,
|
|
|
|
dnl # The 'struct xattr_handler' was constified in the generic
|
|
|
|
dnl # super_block structure.
|
|
|
|
dnl #
|
2019-10-01 22:50:34 +03:00
|
|
|
AC_DEFUN([ZFS_AC_KERNEL_SRC_CONST_XATTR_HANDLER], [
|
|
|
|
ZFS_LINUX_TEST_SRC([const_xattr_handler], [
|
2011-02-11 03:16:52 +03:00
|
|
|
#include <linux/fs.h>
|
|
|
|
#include <linux/xattr.h>
|
|
|
|
|
|
|
|
const struct xattr_handler xattr_test_handler = {
|
|
|
|
.prefix = "test",
|
|
|
|
.get = NULL,
|
|
|
|
.set = NULL,
|
|
|
|
};
|
|
|
|
|
|
|
|
const struct xattr_handler *xattr_handlers[] = {
|
|
|
|
&xattr_test_handler,
|
|
|
|
};
|
|
|
|
|
2013-09-10 23:13:44 +04:00
|
|
|
const struct super_block sb __attribute__ ((unused)) = {
|
|
|
|
.s_xattr = xattr_handlers,
|
|
|
|
};
|
2019-10-01 22:50:34 +03:00
|
|
|
],[])
|
|
|
|
])
|
|
|
|
|
|
|
|
AC_DEFUN([ZFS_AC_KERNEL_CONST_XATTR_HANDLER], [
|
|
|
|
AC_MSG_CHECKING([whether super_block uses const struct xattr_handler])
|
|
|
|
ZFS_LINUX_TEST_RESULT([const_xattr_handler], [
|
2011-02-11 03:16:52 +03:00
|
|
|
AC_MSG_RESULT([yes])
|
|
|
|
],[
|
2019-11-12 19:59:06 +03:00
|
|
|
ZFS_LINUX_TEST_ERROR([const xattr_handler])
|
2011-02-11 03:16:52 +03:00
|
|
|
])
|
|
|
|
])
|
2011-02-11 21:33:01 +03:00
|
|
|
|
2016-10-19 21:19:17 +03:00
|
|
|
dnl #
|
2024-08-16 11:50:48 +03:00
|
|
|
dnl # Android API change,
|
|
|
|
dnl # The xattr_handler->get() callback was
|
|
|
|
dnl # changed to take dentry, inode and flags.
|
2016-10-19 21:19:17 +03:00
|
|
|
dnl #
|
2024-08-16 11:50:48 +03:00
|
|
|
AC_DEFUN([ZFS_AC_KERNEL_SRC_XATTR_HANDLER_GET_DENTRY_INODE_FLAGS], [
|
2022-09-06 20:02:18 +03:00
|
|
|
ZFS_LINUX_TEST_SRC([xattr_handler_get_dentry_inode_flags], [
|
|
|
|
#include <linux/xattr.h>
|
|
|
|
|
2024-01-23 02:50:53 +03:00
|
|
|
static int get(const struct xattr_handler *handler,
|
2022-09-06 20:02:18 +03:00
|
|
|
struct dentry *dentry, struct inode *inode,
|
|
|
|
const char *name, void *buffer,
|
|
|
|
size_t size, int flags) { return 0; }
|
|
|
|
static const struct xattr_handler
|
|
|
|
xops __attribute__ ((unused)) = {
|
|
|
|
.get = get,
|
|
|
|
};
|
|
|
|
],[])
|
2019-10-01 22:50:34 +03:00
|
|
|
])
|
|
|
|
|
2024-08-16 11:50:48 +03:00
|
|
|
AC_DEFUN([ZFS_AC_KERNEL_XATTR_HANDLER_GET_DENTRY_INODE_FLAGS], [
|
|
|
|
AC_MSG_RESULT(no)
|
|
|
|
AC_MSG_CHECKING(
|
|
|
|
[whether xattr_handler->get() wants dentry and inode and flags])
|
|
|
|
ZFS_LINUX_TEST_RESULT([xattr_handler_get_dentry_inode_flags], [
|
2011-02-11 21:33:01 +03:00
|
|
|
AC_MSG_RESULT(yes)
|
2024-08-16 11:50:48 +03:00
|
|
|
AC_DEFINE(HAVE_XATTR_GET_DENTRY_INODE_FLAGS, 1,
|
|
|
|
[xattr_handler->get() wants dentry and inode and flags])
|
2011-02-11 21:33:01 +03:00
|
|
|
],[
|
2016-07-07 03:07:45 +03:00
|
|
|
AC_MSG_RESULT(no)
|
2011-02-11 21:33:01 +03:00
|
|
|
])
|
|
|
|
])
|
|
|
|
|
|
|
|
dnl #
|
2016-01-15 02:01:24 +03:00
|
|
|
dnl # Supported xattr handler set() interfaces checked newest to oldest.
|
2015-11-24 02:06:46 +03:00
|
|
|
dnl #
|
2019-10-01 22:50:34 +03:00
|
|
|
AC_DEFUN([ZFS_AC_KERNEL_SRC_XATTR_HANDLER_SET], [
|
2023-04-11 00:15:36 +03:00
|
|
|
ZFS_LINUX_TEST_SRC([xattr_handler_set_mnt_idmap], [
|
|
|
|
#include <linux/xattr.h>
|
|
|
|
|
2024-01-23 02:50:53 +03:00
|
|
|
static int set(const struct xattr_handler *handler,
|
2023-04-11 00:15:36 +03:00
|
|
|
struct mnt_idmap *idmap,
|
|
|
|
struct dentry *dentry, struct inode *inode,
|
|
|
|
const char *name, const void *buffer,
|
|
|
|
size_t size, int flags)
|
|
|
|
{ return 0; }
|
|
|
|
static const struct xattr_handler
|
|
|
|
xops __attribute__ ((unused)) = {
|
|
|
|
.set = set,
|
|
|
|
};
|
|
|
|
],[])
|
|
|
|
|
2021-03-20 07:00:59 +03:00
|
|
|
ZFS_LINUX_TEST_SRC([xattr_handler_set_userns], [
|
|
|
|
#include <linux/xattr.h>
|
|
|
|
|
2024-01-23 02:50:53 +03:00
|
|
|
static int set(const struct xattr_handler *handler,
|
2021-03-20 07:00:59 +03:00
|
|
|
struct user_namespace *mnt_userns,
|
|
|
|
struct dentry *dentry, struct inode *inode,
|
|
|
|
const char *name, const void *buffer,
|
|
|
|
size_t size, int flags)
|
|
|
|
{ return 0; }
|
|
|
|
static const struct xattr_handler
|
|
|
|
xops __attribute__ ((unused)) = {
|
|
|
|
.set = set,
|
|
|
|
};
|
|
|
|
],[])
|
|
|
|
|
2019-10-01 22:50:34 +03:00
|
|
|
ZFS_LINUX_TEST_SRC([xattr_handler_set_dentry_inode], [
|
2011-02-11 21:33:01 +03:00
|
|
|
#include <linux/xattr.h>
|
|
|
|
|
2024-01-23 02:50:53 +03:00
|
|
|
static int set(const struct xattr_handler *handler,
|
2016-06-02 04:10:06 +03:00
|
|
|
struct dentry *dentry, struct inode *inode,
|
|
|
|
const char *name, const void *buffer,
|
|
|
|
size_t size, int flags)
|
2016-01-15 02:01:24 +03:00
|
|
|
{ return 0; }
|
2013-09-10 23:13:44 +04:00
|
|
|
static const struct xattr_handler
|
|
|
|
xops __attribute__ ((unused)) = {
|
|
|
|
.set = set,
|
|
|
|
};
|
2019-10-01 22:50:34 +03:00
|
|
|
],[])
|
|
|
|
])
|
|
|
|
|
|
|
|
AC_DEFUN([ZFS_AC_KERNEL_XATTR_HANDLER_SET], [
|
|
|
|
dnl #
|
2021-03-20 07:00:59 +03:00
|
|
|
dnl # 5.12 API change,
|
|
|
|
dnl # The xattr_handler->set() callback was changed to 8 arguments, and
|
|
|
|
dnl # struct user_namespace* was inserted as arg #2
|
2019-10-01 22:50:34 +03:00
|
|
|
dnl #
|
2023-04-11 00:15:36 +03:00
|
|
|
dnl # 6.3 API change,
|
|
|
|
dnl # The xattr_handler->set() callback 2nd arg is now struct mnt_idmap *
|
|
|
|
dnl #
|
|
|
|
AC_MSG_CHECKING([whether xattr_handler->set() wants dentry, inode, and mnt_idmap])
|
|
|
|
ZFS_LINUX_TEST_RESULT([xattr_handler_set_mnt_idmap], [
|
2011-02-11 21:33:01 +03:00
|
|
|
AC_MSG_RESULT(yes)
|
2023-04-11 00:15:36 +03:00
|
|
|
AC_DEFINE(HAVE_XATTR_SET_IDMAP, 1,
|
|
|
|
[xattr_handler->set() takes mnt_idmap])
|
|
|
|
], [
|
2024-08-05 16:22:50 +03:00
|
|
|
AC_MSG_RESULT(no)
|
2023-04-11 00:15:36 +03:00
|
|
|
AC_MSG_CHECKING([whether xattr_handler->set() wants dentry, inode, and user_namespace])
|
|
|
|
ZFS_LINUX_TEST_RESULT([xattr_handler_set_userns], [
|
2015-11-24 02:06:46 +03:00
|
|
|
AC_MSG_RESULT(yes)
|
2023-04-11 00:15:36 +03:00
|
|
|
AC_DEFINE(HAVE_XATTR_SET_USERNS, 1,
|
|
|
|
[xattr_handler->set() takes user_namespace])
|
2015-11-24 02:06:46 +03:00
|
|
|
],[
|
2016-01-15 02:01:24 +03:00
|
|
|
dnl #
|
2023-04-11 00:15:36 +03:00
|
|
|
dnl # 4.7 API change,
|
|
|
|
dnl # The xattr_handler->set() callback was changed to take both
|
|
|
|
dnl # dentry and inode.
|
2016-01-15 02:01:24 +03:00
|
|
|
dnl #
|
2015-11-24 02:06:46 +03:00
|
|
|
AC_MSG_RESULT(no)
|
2023-04-11 00:15:36 +03:00
|
|
|
AC_MSG_CHECKING([whether xattr_handler->set() wants dentry and inode])
|
|
|
|
ZFS_LINUX_TEST_RESULT([xattr_handler_set_dentry_inode], [
|
2016-01-15 02:01:24 +03:00
|
|
|
AC_MSG_RESULT(yes)
|
2023-04-11 00:15:36 +03:00
|
|
|
AC_DEFINE(HAVE_XATTR_SET_DENTRY_INODE, 1,
|
|
|
|
[xattr_handler->set() wants both dentry and inode])
|
2016-01-15 02:01:24 +03:00
|
|
|
],[
|
2024-08-16 11:17:39 +03:00
|
|
|
ZFS_LINUX_TEST_ERROR([xattr set()])
|
2016-01-15 02:01:24 +03:00
|
|
|
])
|
2015-11-24 02:06:46 +03:00
|
|
|
])
|
2011-02-11 21:33:01 +03:00
|
|
|
])
|
|
|
|
])
|
2013-10-28 20:22:15 +04:00
|
|
|
|
2019-10-01 22:50:34 +03:00
|
|
|
dnl #
|
|
|
|
dnl # 4.9 API change,
|
|
|
|
dnl # iops->{set,get,remove}xattr and generic_{set,get,remove}xattr are
|
|
|
|
dnl # removed. xattr operations will directly go through sb->s_xattr.
|
|
|
|
dnl #
|
|
|
|
AC_DEFUN([ZFS_AC_KERNEL_SRC_GENERIC_SETXATTR], [
|
|
|
|
ZFS_LINUX_TEST_SRC([have_generic_setxattr], [
|
|
|
|
#include <linux/fs.h>
|
|
|
|
#include <linux/xattr.h>
|
|
|
|
|
|
|
|
static const struct inode_operations
|
|
|
|
iops __attribute__ ((unused)) = {
|
|
|
|
.setxattr = generic_setxattr
|
|
|
|
};
|
|
|
|
],[])
|
|
|
|
])
|
|
|
|
|
|
|
|
AC_DEFUN([ZFS_AC_KERNEL_SRC_XATTR], [
|
|
|
|
ZFS_AC_KERNEL_SRC_CONST_XATTR_HANDLER
|
2024-08-16 11:50:48 +03:00
|
|
|
ZFS_AC_KERNEL_SRC_XATTR_HANDLER_GET_DENTRY_INODE_FLAGS
|
2019-10-01 22:50:34 +03:00
|
|
|
ZFS_AC_KERNEL_SRC_XATTR_HANDLER_SET
|
|
|
|
])
|
|
|
|
|
|
|
|
AC_DEFUN([ZFS_AC_KERNEL_XATTR], [
|
|
|
|
ZFS_AC_KERNEL_CONST_XATTR_HANDLER
|
2024-08-16 11:50:48 +03:00
|
|
|
ZFS_AC_KERNEL_XATTR_HANDLER_GET_DENTRY_INODE_FLAGS
|
2019-10-01 22:50:34 +03:00
|
|
|
ZFS_AC_KERNEL_XATTR_HANDLER_SET
|
|
|
|
])
|