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