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