]> git.proxmox.com Git - mirror_zfs.git/blobdiff - config/kernel-xattr-handler.m4
Linux 5.12 compat: idmapped mounts
[mirror_zfs.git] / config / kernel-xattr-handler.m4
index 137bf4a8aff06c33301ff8e351e32ccedea88b18..00b1e74a9ccbecec801bbe7b5b3ac17073558321 100644 (file)
@@ -152,6 +152,21 @@ dnl #
 dnl # Supported xattr handler set() interfaces checked newest to oldest.
 dnl #
 AC_DEFUN([ZFS_AC_KERNEL_SRC_XATTR_HANDLER_SET], [
+       ZFS_LINUX_TEST_SRC([xattr_handler_set_userns], [
+               #include <linux/xattr.h>
+
+               int set(const struct xattr_handler *handler,
+                       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,
+               };
+       ],[])
+
        ZFS_LINUX_TEST_SRC([xattr_handler_set_dentry_inode], [
                #include <linux/xattr.h>
 
@@ -194,45 +209,58 @@ AC_DEFUN([ZFS_AC_KERNEL_SRC_XATTR_HANDLER_SET], [
 
 AC_DEFUN([ZFS_AC_KERNEL_XATTR_HANDLER_SET], [
        dnl #
-       dnl # 4.7 API change,
-       dnl # The xattr_handler->set() callback was changed to take both
-       dnl # dentry and inode.
+       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
        dnl #
-       AC_MSG_CHECKING([whether xattr_handler->set() wants dentry and inode])
-       ZFS_LINUX_TEST_RESULT([xattr_handler_set_dentry_inode], [
+       AC_MSG_CHECKING([whether xattr_handler->set() wants dentry, inode, and user_namespace])
+       ZFS_LINUX_TEST_RESULT([xattr_handler_set_userns], [
                AC_MSG_RESULT(yes)
-               AC_DEFINE(HAVE_XATTR_SET_DENTRY_INODE, 1,
-                   [xattr_handler->set() wants both dentry and inode])
+               AC_DEFINE(HAVE_XATTR_SET_USERNS, 1,
+                   [xattr_handler->set() takes user_namespace])
        ],[
                dnl #
-               dnl # 4.4 API change,
-               dnl # The xattr_handler->set() callback was changed to take a
-               dnl # xattr_handler, and handler_flags argument was removed and
-               dnl # should be accessed by handler->flags.
+               dnl # 4.7 API change,
+               dnl # The xattr_handler->set() callback was changed to take both
+               dnl # dentry and inode.
                dnl #
                AC_MSG_RESULT(no)
-               AC_MSG_CHECKING(
-                   [whether xattr_handler->set() wants xattr_handler])
-               ZFS_LINUX_TEST_RESULT([xattr_handler_set_xattr_handler], [
+               AC_MSG_CHECKING([whether xattr_handler->set() wants dentry and inode])
+               ZFS_LINUX_TEST_RESULT([xattr_handler_set_dentry_inode], [
                        AC_MSG_RESULT(yes)
-                       AC_DEFINE(HAVE_XATTR_SET_HANDLER, 1,
-                           [xattr_handler->set() wants xattr_handler])
+                       AC_DEFINE(HAVE_XATTR_SET_DENTRY_INODE, 1,
+                           [xattr_handler->set() wants both dentry and inode])
                ],[
                        dnl #
-                       dnl # 2.6.33 API change,
-                       dnl # The xattr_handler->set() callback was changed
-                       dnl # to take a dentry instead of an inode, and a
-                       dnl # handler_flags argument was added.
+                       dnl # 4.4 API change,
+                       dnl # The xattr_handler->set() callback was changed to take a
+                       dnl # xattr_handler, and handler_flags argument was removed and
+                       dnl # should be accessed by handler->flags.
                        dnl #
                        AC_MSG_RESULT(no)
                        AC_MSG_CHECKING(
-                           [whether xattr_handler->set() wants dentry])
-                       ZFS_LINUX_TEST_RESULT([xattr_handler_set_dentry], [
+                           [whether xattr_handler->set() wants xattr_handler])
+                       ZFS_LINUX_TEST_RESULT([xattr_handler_set_xattr_handler], [
                                AC_MSG_RESULT(yes)
-                               AC_DEFINE(HAVE_XATTR_SET_DENTRY, 1,
-                                   [xattr_handler->set() wants dentry])
+                               AC_DEFINE(HAVE_XATTR_SET_HANDLER, 1,
+                                   [xattr_handler->set() wants xattr_handler])
                        ],[
-                               ZFS_LINUX_TEST_ERROR([xattr set()])
+                               dnl #
+                               dnl # 2.6.33 API change,
+                               dnl # The xattr_handler->set() callback was changed
+                               dnl # to take a dentry instead of an inode, and a
+                               dnl # handler_flags argument was added.
+                               dnl #
+                               AC_MSG_RESULT(no)
+                               AC_MSG_CHECKING(
+                                   [whether xattr_handler->set() wants dentry])
+                               ZFS_LINUX_TEST_RESULT([xattr_handler_set_dentry], [
+                                       AC_MSG_RESULT(yes)
+                                       AC_DEFINE(HAVE_XATTR_SET_DENTRY, 1,
+                                           [xattr_handler->set() wants dentry])
+                               ],[
+                                       ZFS_LINUX_TEST_ERROR([xattr set()])
+                               ])
                        ])
                ])
        ])