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