AC_DEFUN([ZFS_AC_KERNEL_SRC_INODE_SETATTR], [
	dnl #
	dnl # Linux 6.3 API
	dnl # The first arg of setattr I/O operations handler type
	dnl # is changed to struct mnt_idmap*
	dnl #
	ZFS_LINUX_TEST_SRC([inode_operations_setattr_mnt_idmap], [
		#include <linux/fs.h>

		int test_setattr(
		    struct mnt_idmap *idmap,
		    struct dentry *de, struct iattr *ia)
		    { return 0; }

		static const struct inode_operations
		    iops __attribute__ ((unused)) = {
			.setattr = test_setattr,
		};
	],[])

	dnl #
	dnl # Linux 5.12 API
	dnl # The setattr I/O operations handler type was extended to require
	dnl # a struct user_namespace* as its first arg, to support idmapped
	dnl # mounts.
	dnl #
	ZFS_LINUX_TEST_SRC([inode_operations_setattr_userns], [
		#include <linux/fs.h>

		int test_setattr(
		    struct user_namespace *userns,
		    struct dentry *de, struct iattr *ia)
		    { return 0; }

		static const struct inode_operations
		    iops __attribute__ ((unused)) = {
			.setattr = test_setattr,
		};
	],[])

	ZFS_LINUX_TEST_SRC([inode_operations_setattr], [
		#include <linux/fs.h>

		int test_setattr(
		    struct dentry *de, struct iattr *ia)
		    { return 0; }

		static const struct inode_operations
		    iops __attribute__ ((unused)) = {
			.setattr = test_setattr,
		};
	],[])
])

AC_DEFUN([ZFS_AC_KERNEL_INODE_SETATTR], [
	dnl #
	dnl # Kernel 6.3 test
	dnl #
	AC_MSG_CHECKING([whether iops->setattr() takes mnt_idmap])
	ZFS_LINUX_TEST_RESULT([inode_operations_setattr_mnt_idmap], [
		AC_MSG_RESULT(yes)
		AC_DEFINE(HAVE_IDMAP_IOPS_SETATTR, 1,
		    [iops->setattr() takes struct mnt_idmap*])
	],[
		AC_MSG_RESULT(no)
		dnl #
		dnl # Kernel 5.12 test
		dnl #
		AC_MSG_CHECKING([whether iops->setattr() takes user_namespace])
		ZFS_LINUX_TEST_RESULT([inode_operations_setattr_userns], [
			AC_MSG_RESULT(yes)
			AC_DEFINE(HAVE_USERNS_IOPS_SETATTR, 1,
			    [iops->setattr() takes struct user_namespace*])
		],[
			AC_MSG_RESULT(no)

			AC_MSG_CHECKING([whether iops->setattr() exists])
			ZFS_LINUX_TEST_RESULT([inode_operations_setattr], [
				AC_MSG_RESULT(yes)
				AC_DEFINE(HAVE_IOPS_SETATTR, 1,
					[iops->setattr() exists])
			],[
				AC_MSG_RESULT(no)
			])
		])
	])
])
