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