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