xref: /freebsd/sys/contrib/openzfs/config/kernel-tmpfile.m4 (revision d411c1d696ef35d60f8c3564e5eef7aeafa2fece)
1eda14cbcSMatt Macydnl #
2eda14cbcSMatt Macydnl # 3.11 API change
3eda14cbcSMatt Macydnl # Add support for i_op->tmpfile
4eda14cbcSMatt Macydnl #
5eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_TMPFILE], [
616038816SMartin Matuska	dnl #
7*d411c1d6SMartin Matuska	dnl # 6.3 API change
8*d411c1d6SMartin Matuska	dnl # The first arg is now struct mnt_idmap *
9*d411c1d6SMartin Matuska	dnl #
10*d411c1d6SMartin Matuska	ZFS_LINUX_TEST_SRC([inode_operations_tmpfile_mnt_idmap], [
11*d411c1d6SMartin Matuska		#include <linux/fs.h>
12*d411c1d6SMartin Matuska		int tmpfile(struct mnt_idmap *idmap,
13*d411c1d6SMartin Matuska		    struct inode *inode, struct file *file,
14*d411c1d6SMartin Matuska		    umode_t mode) { return 0; }
15*d411c1d6SMartin Matuska		static struct inode_operations
16*d411c1d6SMartin Matuska		    iops __attribute__ ((unused)) = {
17*d411c1d6SMartin Matuska			.tmpfile = tmpfile,
18*d411c1d6SMartin Matuska		};
19*d411c1d6SMartin Matuska	],[])
2015f0b8c3SMartin Matuska	dnl # 6.1 API change
2115f0b8c3SMartin Matuska	dnl # use struct file instead of struct dentry
2215f0b8c3SMartin Matuska	dnl #
2315f0b8c3SMartin Matuska	ZFS_LINUX_TEST_SRC([inode_operations_tmpfile], [
2415f0b8c3SMartin Matuska		#include <linux/fs.h>
2515f0b8c3SMartin Matuska		int tmpfile(struct user_namespace *userns,
2615f0b8c3SMartin Matuska		    struct inode *inode, struct file *file,
2715f0b8c3SMartin Matuska		    umode_t mode) { return 0; }
2815f0b8c3SMartin Matuska		static struct inode_operations
2915f0b8c3SMartin Matuska		    iops __attribute__ ((unused)) = {
3015f0b8c3SMartin Matuska			.tmpfile = tmpfile,
3115f0b8c3SMartin Matuska		};
3215f0b8c3SMartin Matuska	],[])
3315f0b8c3SMartin Matuska	dnl #
3416038816SMartin Matuska	dnl # 5.11 API change
3516038816SMartin Matuska	dnl # add support for userns parameter to tmpfile
3616038816SMartin Matuska	dnl #
3715f0b8c3SMartin Matuska	ZFS_LINUX_TEST_SRC([inode_operations_tmpfile_dentry_userns], [
3816038816SMartin Matuska		#include <linux/fs.h>
3916038816SMartin Matuska		int tmpfile(struct user_namespace *userns,
4016038816SMartin Matuska		    struct inode *inode, struct dentry *dentry,
4116038816SMartin Matuska		    umode_t mode) { return 0; }
4216038816SMartin Matuska		static struct inode_operations
4316038816SMartin Matuska		    iops __attribute__ ((unused)) = {
4416038816SMartin Matuska			.tmpfile = tmpfile,
4516038816SMartin Matuska		};
4616038816SMartin Matuska	],[])
4715f0b8c3SMartin Matuska	ZFS_LINUX_TEST_SRC([inode_operations_tmpfile_dentry], [
48eda14cbcSMatt Macy			#include <linux/fs.h>
49eda14cbcSMatt Macy			int tmpfile(struct inode *inode, struct dentry *dentry,
50eda14cbcSMatt Macy			    umode_t mode) { return 0; }
51eda14cbcSMatt Macy			static struct inode_operations
52eda14cbcSMatt Macy			    iops __attribute__ ((unused)) = {
53eda14cbcSMatt Macy				.tmpfile = tmpfile,
54eda14cbcSMatt Macy			};
55eda14cbcSMatt Macy	],[])
56eda14cbcSMatt Macy])
57eda14cbcSMatt Macy
58eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_TMPFILE], [
59eda14cbcSMatt Macy	AC_MSG_CHECKING([whether i_op->tmpfile() exists])
60*d411c1d6SMartin Matuska	ZFS_LINUX_TEST_RESULT([inode_operations_tmpfile_mnt_idmap], [
61*d411c1d6SMartin Matuska		AC_MSG_RESULT(yes)
62*d411c1d6SMartin Matuska		AC_DEFINE(HAVE_TMPFILE, 1, [i_op->tmpfile() exists])
63*d411c1d6SMartin Matuska		AC_DEFINE(HAVE_TMPFILE_IDMAP, 1, [i_op->tmpfile() has mnt_idmap])
64*d411c1d6SMartin Matuska	], [
6515f0b8c3SMartin Matuska		ZFS_LINUX_TEST_RESULT([inode_operations_tmpfile], [
6616038816SMartin Matuska			AC_MSG_RESULT(yes)
6716038816SMartin Matuska			AC_DEFINE(HAVE_TMPFILE, 1, [i_op->tmpfile() exists])
6816038816SMartin Matuska			AC_DEFINE(HAVE_TMPFILE_USERNS, 1, [i_op->tmpfile() has userns])
6916038816SMartin Matuska		],[
7015f0b8c3SMartin Matuska			ZFS_LINUX_TEST_RESULT([inode_operations_tmpfile_dentry_userns], [
71eda14cbcSMatt Macy				AC_MSG_RESULT(yes)
72eda14cbcSMatt Macy				AC_DEFINE(HAVE_TMPFILE, 1, [i_op->tmpfile() exists])
7315f0b8c3SMartin Matuska				AC_DEFINE(HAVE_TMPFILE_USERNS, 1, [i_op->tmpfile() has userns])
7415f0b8c3SMartin Matuska				AC_DEFINE(HAVE_TMPFILE_DENTRY, 1, [i_op->tmpfile() uses old dentry signature])
75eda14cbcSMatt Macy			],[
7615f0b8c3SMartin Matuska				ZFS_LINUX_TEST_RESULT([inode_operations_tmpfile_dentry], [
7715f0b8c3SMartin Matuska					AC_MSG_RESULT(yes)
7815f0b8c3SMartin Matuska					AC_DEFINE(HAVE_TMPFILE, 1, [i_op->tmpfile() exists])
7915f0b8c3SMartin Matuska					AC_DEFINE(HAVE_TMPFILE_DENTRY, 1, [i_op->tmpfile() uses old dentry signature])
8015f0b8c3SMartin Matuska				],[
8115f0b8c3SMartin Matuska					ZFS_LINUX_REQUIRE_API([i_op->tmpfile()], [3.11])
8215f0b8c3SMartin Matuska				])
83eda14cbcSMatt Macy			])
84eda14cbcSMatt Macy		])
8516038816SMartin Matuska	])
86*d411c1d6SMartin Matuska])
87