1AC_DEFUN([ZFS_AC_KERNEL_SRC_INODE_GETATTR], [
2	dnl #
3	dnl # Linux 5.12 API
4	dnl # The getattr I/O operations handler type was extended to require
5	dnl # a struct user_namespace* as its first arg, to support idmapped
6	dnl # mounts.
7	dnl #
8	ZFS_LINUX_TEST_SRC([inode_operations_getattr_userns], [
9		#include <linux/fs.h>
10
11		int test_getattr(
12			struct user_namespace *userns,
13		    const struct path *p, struct kstat *k,
14		    u32 request_mask, unsigned int query_flags)
15		    { return 0; }
16
17		static const struct inode_operations
18		    iops __attribute__ ((unused)) = {
19			.getattr = test_getattr,
20		};
21	],[])
22
23	dnl #
24	dnl # Linux 4.11 API
25	dnl # See torvalds/linux@a528d35
26	dnl #
27	ZFS_LINUX_TEST_SRC([inode_operations_getattr_path], [
28		#include <linux/fs.h>
29
30		int test_getattr(
31		    const struct path *p, struct kstat *k,
32		    u32 request_mask, unsigned int query_flags)
33		    { return 0; }
34
35		static const struct inode_operations
36		    iops __attribute__ ((unused)) = {
37			.getattr = test_getattr,
38		};
39	],[])
40
41	ZFS_LINUX_TEST_SRC([inode_operations_getattr_vfsmount], [
42		#include <linux/fs.h>
43
44		int test_getattr(
45		    struct vfsmount *mnt, struct dentry *d,
46		    struct kstat *k)
47		    { return 0; }
48
49		static const struct inode_operations
50		    iops __attribute__ ((unused)) = {
51			.getattr = test_getattr,
52		};
53	],[])
54])
55
56AC_DEFUN([ZFS_AC_KERNEL_INODE_GETATTR], [
57	dnl #
58	dnl # Kernel 5.12 test
59	dnl #
60	AC_MSG_CHECKING([whether iops->getattr() takes user_namespace])
61	ZFS_LINUX_TEST_RESULT([inode_operations_getattr_userns], [
62		AC_MSG_RESULT(yes)
63		AC_DEFINE(HAVE_USERNS_IOPS_GETATTR, 1,
64		    [iops->getattr() takes struct user_namespace*])
65	],[
66		AC_MSG_RESULT(no)
67
68		dnl #
69		dnl # Kernel 4.11 test
70		dnl #
71		AC_MSG_CHECKING([whether iops->getattr() takes a path])
72		ZFS_LINUX_TEST_RESULT([inode_operations_getattr_path], [
73			AC_MSG_RESULT(yes)
74			AC_DEFINE(HAVE_PATH_IOPS_GETATTR, 1,
75				[iops->getattr() takes a path])
76		],[
77			AC_MSG_RESULT(no)
78
79			dnl #
80			dnl # Kernel < 4.11 test
81			dnl #
82			AC_MSG_CHECKING([whether iops->getattr() takes a vfsmount])
83			ZFS_LINUX_TEST_RESULT([inode_operations_getattr_vfsmount], [
84				AC_MSG_RESULT(yes)
85				AC_DEFINE(HAVE_VFSMOUNT_IOPS_GETATTR, 1,
86					[iops->getattr() takes a vfsmount])
87			],[
88				AC_MSG_RESULT(no)
89			])
90		])
91	])
92])
93