xref: /freebsd/sys/contrib/openzfs/config/kernel-acl.m4 (revision 7a7741af18d6c8a804cc643cb7ecda9d730c6aa6)
1eda14cbcSMatt Macydnl #
2eda14cbcSMatt Macydnl # 3.1 API change,
3eda14cbcSMatt Macydnl # posix_acl_equiv_mode now wants an umode_t instead of a mode_t
4eda14cbcSMatt Macydnl #
5eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_POSIX_ACL_EQUIV_MODE_WANTS_UMODE_T], [
6eda14cbcSMatt Macy	ZFS_LINUX_TEST_SRC([posix_acl_equiv_mode], [
7eda14cbcSMatt Macy		#include <linux/fs.h>
8eda14cbcSMatt Macy		#include <linux/posix_acl.h>
9eda14cbcSMatt Macy	],[
10eda14cbcSMatt Macy		umode_t tmp;
11eda14cbcSMatt Macy		posix_acl_equiv_mode(NULL, &tmp);
12eda14cbcSMatt Macy	])
13eda14cbcSMatt Macy])
14eda14cbcSMatt Macy
15eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_POSIX_ACL_EQUIV_MODE_WANTS_UMODE_T], [
16eda14cbcSMatt Macy	AC_MSG_CHECKING([whether posix_acl_equiv_mode() wants umode_t])
17eda14cbcSMatt Macy	ZFS_LINUX_TEST_RESULT([posix_acl_equiv_mode], [
18eda14cbcSMatt Macy		AC_MSG_RESULT(yes)
19eda14cbcSMatt Macy	],[
20eda14cbcSMatt Macy		ZFS_LINUX_TEST_ERROR([posix_acl_equiv_mode()])
21eda14cbcSMatt Macy	])
22eda14cbcSMatt Macy])
23eda14cbcSMatt Macy
24eda14cbcSMatt Macydnl #
25eda14cbcSMatt Macydnl # 3.1 API change,
26eda14cbcSMatt Macydnl # Check if inode_operations contains the function get_acl
27eda14cbcSMatt Macydnl #
2853b70c86SMartin Matuskadnl # 5.15 API change,
2953b70c86SMartin Matuskadnl # Added the bool rcu argument to get_acl for rcu path walk.
3053b70c86SMartin Matuskadnl #
3115f0b8c3SMartin Matuskadnl # 6.2 API change,
3215f0b8c3SMartin Matuskadnl # get_acl() was renamed to get_inode_acl()
3315f0b8c3SMartin Matuskadnl #
34eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_INODE_OPERATIONS_GET_ACL], [
35eda14cbcSMatt Macy	ZFS_LINUX_TEST_SRC([inode_operations_get_acl], [
36eda14cbcSMatt Macy		#include <linux/fs.h>
37eda14cbcSMatt Macy
38fd45b686SMartin Matuska		static struct posix_acl *get_acl_fn(struct inode *inode, int type)
39eda14cbcSMatt Macy		    { return NULL; }
40eda14cbcSMatt Macy
41eda14cbcSMatt Macy		static const struct inode_operations
42eda14cbcSMatt Macy		    iops __attribute__ ((unused)) = {
43eda14cbcSMatt Macy			.get_acl = get_acl_fn,
44eda14cbcSMatt Macy		};
45eda14cbcSMatt Macy	],[])
4653b70c86SMartin Matuska
4753b70c86SMartin Matuska	ZFS_LINUX_TEST_SRC([inode_operations_get_acl_rcu], [
4853b70c86SMartin Matuska		#include <linux/fs.h>
4953b70c86SMartin Matuska
50fd45b686SMartin Matuska		static struct posix_acl *get_acl_fn(struct inode *inode, int type,
5153b70c86SMartin Matuska		    bool rcu) { return NULL; }
5253b70c86SMartin Matuska
5353b70c86SMartin Matuska		static const struct inode_operations
5453b70c86SMartin Matuska		    iops __attribute__ ((unused)) = {
5553b70c86SMartin Matuska			.get_acl = get_acl_fn,
5653b70c86SMartin Matuska		};
5753b70c86SMartin Matuska	],[])
5815f0b8c3SMartin Matuska
5915f0b8c3SMartin Matuska	ZFS_LINUX_TEST_SRC([inode_operations_get_inode_acl], [
6015f0b8c3SMartin Matuska		#include <linux/fs.h>
6115f0b8c3SMartin Matuska
62fd45b686SMartin Matuska		static struct posix_acl *get_inode_acl_fn(struct inode *inode, int type,
6315f0b8c3SMartin Matuska		    bool rcu) { return NULL; }
6415f0b8c3SMartin Matuska
6515f0b8c3SMartin Matuska		static const struct inode_operations
6615f0b8c3SMartin Matuska		    iops __attribute__ ((unused)) = {
6715f0b8c3SMartin Matuska			.get_inode_acl = get_inode_acl_fn,
6815f0b8c3SMartin Matuska		};
6915f0b8c3SMartin Matuska	],[])
70eda14cbcSMatt Macy])
71eda14cbcSMatt Macy
72eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_INODE_OPERATIONS_GET_ACL], [
73eda14cbcSMatt Macy	AC_MSG_CHECKING([whether iops->get_acl() exists])
74eda14cbcSMatt Macy	ZFS_LINUX_TEST_RESULT([inode_operations_get_acl], [
75eda14cbcSMatt Macy		AC_MSG_RESULT(yes)
7653b70c86SMartin Matuska		AC_DEFINE(HAVE_GET_ACL, 1, [iops->get_acl() exists])
7753b70c86SMartin Matuska	],[
7853b70c86SMartin Matuska		ZFS_LINUX_TEST_RESULT([inode_operations_get_acl_rcu], [
7953b70c86SMartin Matuska			AC_MSG_RESULT(yes)
8053b70c86SMartin Matuska			AC_DEFINE(HAVE_GET_ACL_RCU, 1, [iops->get_acl() takes rcu])
81eda14cbcSMatt Macy		],[
8215f0b8c3SMartin Matuska			ZFS_LINUX_TEST_RESULT([inode_operations_get_inode_acl], [
8315f0b8c3SMartin Matuska				AC_MSG_RESULT(yes)
8415f0b8c3SMartin Matuska				AC_DEFINE(HAVE_GET_INODE_ACL, 1, [has iops->get_inode_acl()])
8515f0b8c3SMartin Matuska			],[
8615f0b8c3SMartin Matuska				ZFS_LINUX_TEST_ERROR([iops->get_acl() or iops->get_inode_acl()])
8715f0b8c3SMartin Matuska			])
88eda14cbcSMatt Macy		])
89eda14cbcSMatt Macy	])
9053b70c86SMartin Matuska])
91eda14cbcSMatt Macy
92eda14cbcSMatt Macydnl #
9316038816SMartin Matuskadnl # 5.12 API change,
9416038816SMartin Matuskadnl # set_acl() added a user_namespace* parameter first
9516038816SMartin Matuskadnl #
9615f0b8c3SMartin Matuskadnl # 6.2 API change,
9715f0b8c3SMartin Matuskadnl # set_acl() second paramter changed to a struct dentry *
9815f0b8c3SMartin Matuskadnl #
99d411c1d6SMartin Matuskadnl # 6.3 API change,
100d411c1d6SMartin Matuskadnl # set_acl() first parameter changed to struct mnt_idmap *
101d411c1d6SMartin Matuskadnl #
102eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_INODE_OPERATIONS_SET_ACL], [
103d411c1d6SMartin Matuska	ZFS_LINUX_TEST_SRC([inode_operations_set_acl_mnt_idmap_dentry], [
104d411c1d6SMartin Matuska		#include <linux/fs.h>
105d411c1d6SMartin Matuska
106fd45b686SMartin Matuska		static int set_acl_fn(struct mnt_idmap *idmap,
107d411c1d6SMartin Matuska		    struct dentry *dent, struct posix_acl *acl,
108d411c1d6SMartin Matuska		    int type) { return 0; }
109d411c1d6SMartin Matuska
110d411c1d6SMartin Matuska		static const struct inode_operations
111d411c1d6SMartin Matuska		    iops __attribute__ ((unused)) = {
112d411c1d6SMartin Matuska			.set_acl = set_acl_fn,
113d411c1d6SMartin Matuska		};
114d411c1d6SMartin Matuska	],[])
11515f0b8c3SMartin Matuska	ZFS_LINUX_TEST_SRC([inode_operations_set_acl_userns_dentry], [
11615f0b8c3SMartin Matuska		#include <linux/fs.h>
11715f0b8c3SMartin Matuska
118fd45b686SMartin Matuska		static int set_acl_fn(struct user_namespace *userns,
11915f0b8c3SMartin Matuska		    struct dentry *dent, struct posix_acl *acl,
12015f0b8c3SMartin Matuska		    int type) { return 0; }
12115f0b8c3SMartin Matuska
12215f0b8c3SMartin Matuska		static const struct inode_operations
12315f0b8c3SMartin Matuska		    iops __attribute__ ((unused)) = {
12415f0b8c3SMartin Matuska			.set_acl = set_acl_fn,
12515f0b8c3SMartin Matuska		};
12615f0b8c3SMartin Matuska	],[])
12716038816SMartin Matuska	ZFS_LINUX_TEST_SRC([inode_operations_set_acl_userns], [
12816038816SMartin Matuska		#include <linux/fs.h>
12916038816SMartin Matuska
130fd45b686SMartin Matuska		static int set_acl_fn(struct user_namespace *userns,
13116038816SMartin Matuska		    struct inode *inode, struct posix_acl *acl,
13216038816SMartin Matuska		    int type) { return 0; }
13316038816SMartin Matuska
13416038816SMartin Matuska		static const struct inode_operations
13516038816SMartin Matuska		    iops __attribute__ ((unused)) = {
13616038816SMartin Matuska			.set_acl = set_acl_fn,
13716038816SMartin Matuska		};
13816038816SMartin Matuska	],[])
139eda14cbcSMatt Macy	ZFS_LINUX_TEST_SRC([inode_operations_set_acl], [
140eda14cbcSMatt Macy		#include <linux/fs.h>
141eda14cbcSMatt Macy
142fd45b686SMartin Matuska		static int set_acl_fn(struct inode *inode, struct posix_acl *acl,
143eda14cbcSMatt Macy		    int type) { return 0; }
144eda14cbcSMatt Macy
145eda14cbcSMatt Macy		static const struct inode_operations
146eda14cbcSMatt Macy		    iops __attribute__ ((unused)) = {
147eda14cbcSMatt Macy			.set_acl = set_acl_fn,
148eda14cbcSMatt Macy		};
149eda14cbcSMatt Macy	],[])
150eda14cbcSMatt Macy])
151eda14cbcSMatt Macy
152eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_INODE_OPERATIONS_SET_ACL], [
153*7a7741afSMartin Matuska	AC_MSG_CHECKING([whether iops->set_acl() with 4 args exists])
15416038816SMartin Matuska	ZFS_LINUX_TEST_RESULT([inode_operations_set_acl_userns], [
155eda14cbcSMatt Macy		AC_MSG_RESULT(yes)
15616038816SMartin Matuska		AC_DEFINE(HAVE_SET_ACL_USERNS, 1, [iops->set_acl() takes 4 args])
15716038816SMartin Matuska	],[
158d411c1d6SMartin Matuska		ZFS_LINUX_TEST_RESULT([inode_operations_set_acl_mnt_idmap_dentry], [
159d411c1d6SMartin Matuska			AC_MSG_RESULT(yes)
160d411c1d6SMartin Matuska			AC_DEFINE(HAVE_SET_ACL_IDMAP_DENTRY, 1,
161d411c1d6SMartin Matuska			    [iops->set_acl() takes 4 args, arg1 is struct mnt_idmap *])
162d411c1d6SMartin Matuska		],[
16315f0b8c3SMartin Matuska			ZFS_LINUX_TEST_RESULT([inode_operations_set_acl_userns_dentry], [
16415f0b8c3SMartin Matuska				AC_MSG_RESULT(yes)
16515f0b8c3SMartin Matuska				AC_DEFINE(HAVE_SET_ACL_USERNS_DENTRY_ARG2, 1,
16615f0b8c3SMartin Matuska				    [iops->set_acl() takes 4 args, arg2 is struct dentry *])
16715f0b8c3SMartin Matuska			],[
168eda14cbcSMatt Macy				AC_MSG_RESULT(no)
169eda14cbcSMatt Macy			])
170eda14cbcSMatt Macy		])
171eda14cbcSMatt Macy	])
172eda14cbcSMatt Macy])
173eda14cbcSMatt Macy
174eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_ACL], [
175eda14cbcSMatt Macy	ZFS_AC_KERNEL_SRC_POSIX_ACL_EQUIV_MODE_WANTS_UMODE_T
176eda14cbcSMatt Macy	ZFS_AC_KERNEL_SRC_INODE_OPERATIONS_GET_ACL
177eda14cbcSMatt Macy	ZFS_AC_KERNEL_SRC_INODE_OPERATIONS_SET_ACL
178eda14cbcSMatt Macy])
179eda14cbcSMatt Macy
180eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_ACL], [
181eda14cbcSMatt Macy	ZFS_AC_KERNEL_POSIX_ACL_EQUIV_MODE_WANTS_UMODE_T
182eda14cbcSMatt Macy	ZFS_AC_KERNEL_INODE_OPERATIONS_GET_ACL
183eda14cbcSMatt Macy	ZFS_AC_KERNEL_INODE_OPERATIONS_SET_ACL
184eda14cbcSMatt Macy])
185