1dnl # 2dnl # Supported mkdir() interfaces checked newest to oldest. 3dnl # 4AC_DEFUN([ZFS_AC_KERNEL_SRC_MKDIR], [ 5 dnl # 6 dnl # 6.3 API change 7 dnl # mkdir() takes struct mnt_idmap * as the first arg 8 dnl # 9 ZFS_LINUX_TEST_SRC([mkdir_mnt_idmap], [ 10 #include <linux/fs.h> 11 12 int mkdir(struct mnt_idmap *idmap, 13 struct inode *inode, struct dentry *dentry, 14 umode_t umode) { return 0; } 15 static const struct inode_operations 16 iops __attribute__ ((unused)) = { 17 .mkdir = mkdir, 18 }; 19 ],[]) 20 21 dnl # 22 dnl # 5.12 API change 23 dnl # The struct user_namespace arg was added as the first argument to 24 dnl # mkdir() 25 dnl # 26 ZFS_LINUX_TEST_SRC([mkdir_user_namespace], [ 27 #include <linux/fs.h> 28 29 int mkdir(struct user_namespace *userns, 30 struct inode *inode, struct dentry *dentry, 31 umode_t umode) { return 0; } 32 33 static const struct inode_operations 34 iops __attribute__ ((unused)) = { 35 .mkdir = mkdir, 36 }; 37 ],[]) 38 39 dnl # 40 dnl # 3.3 API change 41 dnl # The VFS .create, .mkdir and .mknod callbacks were updated to take a 42 dnl # umode_t type rather than an int. The expectation is that any backport 43 dnl # would also change all three prototypes. However, if it turns out that 44 dnl # some distribution doesn't backport the whole thing this could be 45 dnl # broken apart into three separate checks. 46 dnl # 47 ZFS_LINUX_TEST_SRC([inode_operations_mkdir], [ 48 #include <linux/fs.h> 49 50 int mkdir(struct inode *inode, struct dentry *dentry, 51 umode_t umode) { return 0; } 52 53 static const struct inode_operations 54 iops __attribute__ ((unused)) = { 55 .mkdir = mkdir, 56 }; 57 ],[]) 58]) 59 60AC_DEFUN([ZFS_AC_KERNEL_MKDIR], [ 61 dnl # 62 dnl # 6.3 API change 63 dnl # mkdir() takes struct mnt_idmap * as the first arg 64 dnl # 65 AC_MSG_CHECKING([whether iops->mkdir() takes struct mnt_idmap*]) 66 ZFS_LINUX_TEST_RESULT([mkdir_mnt_idmap], [ 67 AC_MSG_RESULT(yes) 68 AC_DEFINE(HAVE_IOPS_MKDIR_IDMAP, 1, 69 [iops->mkdir() takes struct mnt_idmap*]) 70 ],[ 71 dnl # 72 dnl # 5.12 API change 73 dnl # The struct user_namespace arg was added as the first argument to 74 dnl # mkdir() of the iops structure. 75 dnl # 76 AC_MSG_CHECKING([whether iops->mkdir() takes struct user_namespace*]) 77 ZFS_LINUX_TEST_RESULT([mkdir_user_namespace], [ 78 AC_MSG_RESULT(yes) 79 AC_DEFINE(HAVE_IOPS_MKDIR_USERNS, 1, 80 [iops->mkdir() takes struct user_namespace*]) 81 ],[ 82 AC_MSG_RESULT(no) 83 84 AC_MSG_CHECKING([whether iops->mkdir() takes umode_t]) 85 ZFS_LINUX_TEST_RESULT([inode_operations_mkdir], [ 86 AC_MSG_RESULT(yes) 87 AC_DEFINE(HAVE_MKDIR_UMODE_T, 1, 88 [iops->mkdir() takes umode_t]) 89 ],[ 90 ZFS_LINUX_TEST_ERROR([mkdir()]) 91 ]) 92 ]) 93 ]) 94]) 95