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