Linux: Fix zfs_prune panics
[zfs.git] / config / kernel-setattr-prepare.m4
blobb10ddafc054b0fe3630b58f561ba493714bbcf54
1 AC_DEFUN([ZFS_AC_KERNEL_SRC_SETATTR_PREPARE], [
2         dnl #
3         dnl # 4.9 API change
4         dnl # The inode_change_ok() function has been renamed setattr_prepare()
5         dnl # and updated to take a dentry rather than an inode.
6         dnl #
7         ZFS_LINUX_TEST_SRC([setattr_prepare], [
8                 #include <linux/fs.h>
9         ], [
10                 struct dentry *dentry = NULL;
11                 struct iattr *attr = NULL;
12                 int error __attribute__ ((unused)) =
13                         setattr_prepare(dentry, attr);
14         ])
16         dnl #
17         dnl # 5.12 API change
18         dnl # The setattr_prepare() function has been changed to accept a new argument
19         dnl # for struct user_namespace*
20         dnl #
21         ZFS_LINUX_TEST_SRC([setattr_prepare_userns], [
22                 #include <linux/fs.h>
23         ], [
24                 struct dentry *dentry = NULL;
25                 struct iattr *attr = NULL;
26                 struct user_namespace *userns = NULL;
27                 int error __attribute__ ((unused)) =
28                         setattr_prepare(userns, dentry, attr);
29         ])
31         dnl #
32         dnl # 6.3 API change
33         dnl # The first arg of setattr_prepare() is changed to struct mnt_idmap*
34         dnl #
35         ZFS_LINUX_TEST_SRC([setattr_prepare_mnt_idmap], [
36                 #include <linux/fs.h>
37         ], [
38                 struct dentry *dentry = NULL;
39                 struct iattr *attr = NULL;
40                 struct mnt_idmap *idmap = NULL;
41                 int error __attribute__ ((unused)) =
42                         setattr_prepare(idmap, dentry, attr);
43         ])
46 AC_DEFUN([ZFS_AC_KERNEL_SETATTR_PREPARE], [
47         AC_MSG_CHECKING([whether setattr_prepare() is available and accepts struct mnt_idmap*])
48         ZFS_LINUX_TEST_RESULT_SYMBOL([setattr_prepare_mnt_idmap],
49             [setattr_prepare], [fs/attr.c], [
50                 AC_MSG_RESULT(yes)
51                 AC_DEFINE(HAVE_SETATTR_PREPARE_IDMAP, 1,
52                     [setattr_prepare() accepts mnt_idmap])
53         ], [
54                 AC_MSG_RESULT(no)
56                 AC_MSG_CHECKING([whether setattr_prepare() is available and accepts struct user_namespace*])
57                 ZFS_LINUX_TEST_RESULT_SYMBOL([setattr_prepare_userns],
58                     [setattr_prepare], [fs/attr.c], [
59                         AC_MSG_RESULT(yes)
60                         AC_DEFINE(HAVE_SETATTR_PREPARE_USERNS, 1,
61                             [setattr_prepare() accepts user_namespace])
62                 ], [
63                         AC_MSG_RESULT(no)
65                         AC_MSG_CHECKING([whether setattr_prepare() is available, doesn't accept user_namespace])
66                         ZFS_LINUX_TEST_RESULT_SYMBOL([setattr_prepare],
67                                 [setattr_prepare], [fs/attr.c], [
68                                 AC_MSG_RESULT(yes)
69                                 AC_DEFINE(HAVE_SETATTR_PREPARE_NO_USERNS, 1,
70                                         [setattr_prepare() is available, doesn't accept user_namespace])
71                         ], [
72                                 AC_MSG_RESULT(no)
73                         ])
74                 ])
75         ])