xref: /freebsd/sys/contrib/openzfs/config/kernel-mkdir.m4 (revision b1c1ee4429fcca8f69873a8be66184e68e1b19d7)
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