xref: /freebsd-src/sys/contrib/openzfs/config/kernel-inode-setattr.m4 (revision d411c1d696ef35d60f8c3564e5eef7aeafa2fece)
1*d411c1d6SMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_SRC_INODE_SETATTR], [
2*d411c1d6SMartin Matuska	dnl #
3*d411c1d6SMartin Matuska	dnl # Linux 6.3 API
4*d411c1d6SMartin Matuska	dnl # The first arg of setattr I/O operations handler type
5*d411c1d6SMartin Matuska	dnl # is changed to struct mnt_idmap*
6*d411c1d6SMartin Matuska	dnl #
7*d411c1d6SMartin Matuska	ZFS_LINUX_TEST_SRC([inode_operations_setattr_mnt_idmap], [
8*d411c1d6SMartin Matuska		#include <linux/fs.h>
9*d411c1d6SMartin Matuska
10*d411c1d6SMartin Matuska		int test_setattr(
11*d411c1d6SMartin Matuska		    struct mnt_idmap *idmap,
12*d411c1d6SMartin Matuska		    struct dentry *de, struct iattr *ia)
13*d411c1d6SMartin Matuska		    { return 0; }
14*d411c1d6SMartin Matuska
15*d411c1d6SMartin Matuska		static const struct inode_operations
16*d411c1d6SMartin Matuska		    iops __attribute__ ((unused)) = {
17*d411c1d6SMartin Matuska			.setattr = test_setattr,
18*d411c1d6SMartin Matuska		};
19*d411c1d6SMartin Matuska	],[])
20*d411c1d6SMartin Matuska
21*d411c1d6SMartin Matuska	dnl #
22*d411c1d6SMartin Matuska	dnl # Linux 5.12 API
23*d411c1d6SMartin Matuska	dnl # The setattr I/O operations handler type was extended to require
24*d411c1d6SMartin Matuska	dnl # a struct user_namespace* as its first arg, to support idmapped
25*d411c1d6SMartin Matuska	dnl # mounts.
26*d411c1d6SMartin Matuska	dnl #
27*d411c1d6SMartin Matuska	ZFS_LINUX_TEST_SRC([inode_operations_setattr_userns], [
28*d411c1d6SMartin Matuska		#include <linux/fs.h>
29*d411c1d6SMartin Matuska
30*d411c1d6SMartin Matuska		int test_setattr(
31*d411c1d6SMartin Matuska		    struct user_namespace *userns,
32*d411c1d6SMartin Matuska		    struct dentry *de, struct iattr *ia)
33*d411c1d6SMartin Matuska		    { return 0; }
34*d411c1d6SMartin Matuska
35*d411c1d6SMartin Matuska		static const struct inode_operations
36*d411c1d6SMartin Matuska		    iops __attribute__ ((unused)) = {
37*d411c1d6SMartin Matuska			.setattr = test_setattr,
38*d411c1d6SMartin Matuska		};
39*d411c1d6SMartin Matuska	],[])
40*d411c1d6SMartin Matuska
41*d411c1d6SMartin Matuska	ZFS_LINUX_TEST_SRC([inode_operations_setattr], [
42*d411c1d6SMartin Matuska		#include <linux/fs.h>
43*d411c1d6SMartin Matuska
44*d411c1d6SMartin Matuska		int test_setattr(
45*d411c1d6SMartin Matuska		    struct dentry *de, struct iattr *ia)
46*d411c1d6SMartin Matuska		    { return 0; }
47*d411c1d6SMartin Matuska
48*d411c1d6SMartin Matuska		static const struct inode_operations
49*d411c1d6SMartin Matuska		    iops __attribute__ ((unused)) = {
50*d411c1d6SMartin Matuska			.setattr = test_setattr,
51*d411c1d6SMartin Matuska		};
52*d411c1d6SMartin Matuska	],[])
53*d411c1d6SMartin Matuska])
54*d411c1d6SMartin Matuska
55*d411c1d6SMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_INODE_SETATTR], [
56*d411c1d6SMartin Matuska	dnl #
57*d411c1d6SMartin Matuska	dnl # Kernel 6.3 test
58*d411c1d6SMartin Matuska	dnl #
59*d411c1d6SMartin Matuska	AC_MSG_CHECKING([whether iops->setattr() takes mnt_idmap])
60*d411c1d6SMartin Matuska	ZFS_LINUX_TEST_RESULT([inode_operations_setattr_mnt_idmap], [
61*d411c1d6SMartin Matuska		AC_MSG_RESULT(yes)
62*d411c1d6SMartin Matuska		AC_DEFINE(HAVE_IDMAP_IOPS_SETATTR, 1,
63*d411c1d6SMartin Matuska		    [iops->setattr() takes struct mnt_idmap*])
64*d411c1d6SMartin Matuska	],[
65*d411c1d6SMartin Matuska		AC_MSG_RESULT(no)
66*d411c1d6SMartin Matuska		dnl #
67*d411c1d6SMartin Matuska		dnl # Kernel 5.12 test
68*d411c1d6SMartin Matuska		dnl #
69*d411c1d6SMartin Matuska		AC_MSG_CHECKING([whether iops->setattr() takes user_namespace])
70*d411c1d6SMartin Matuska		ZFS_LINUX_TEST_RESULT([inode_operations_setattr_userns], [
71*d411c1d6SMartin Matuska			AC_MSG_RESULT(yes)
72*d411c1d6SMartin Matuska			AC_DEFINE(HAVE_USERNS_IOPS_SETATTR, 1,
73*d411c1d6SMartin Matuska			    [iops->setattr() takes struct user_namespace*])
74*d411c1d6SMartin Matuska		],[
75*d411c1d6SMartin Matuska			AC_MSG_RESULT(no)
76*d411c1d6SMartin Matuska
77*d411c1d6SMartin Matuska			AC_MSG_CHECKING([whether iops->setattr() exists])
78*d411c1d6SMartin Matuska			ZFS_LINUX_TEST_RESULT([inode_operations_setattr], [
79*d411c1d6SMartin Matuska				AC_MSG_RESULT(yes)
80*d411c1d6SMartin Matuska				AC_DEFINE(HAVE_IOPS_SETATTR, 1,
81*d411c1d6SMartin Matuska					[iops->setattr() exists])
82*d411c1d6SMartin Matuska			],[
83*d411c1d6SMartin Matuska				AC_MSG_RESULT(no)
84*d411c1d6SMartin Matuska			])
85*d411c1d6SMartin Matuska		])
86*d411c1d6SMartin Matuska	])
87*d411c1d6SMartin Matuska])
88