mirror of
				https://git.proxmox.com/git/mirror_zfs
				synced 2025-11-04 03:24:44 +00:00 
			
		
		
		
	Currently, if API tests fail, we either ignore the failures, or unconditionally halt the kernel build. This leads to situations where incompatibilities with existing APIs may develop, but not trip the configure compatibility checks. This introduces a new mechanism to require APIs for kernels above a particular version. While not perfect, this at least guarantees mainline kernels do not break existing APIs without at least providing some warning. Reviewed-by: Richard Yao <richard.yao@alumni.stonybrook.edu> Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Antonio Russo <aerusso@aerusso.net> Closes #14343
		
			
				
	
	
		
			68 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			68 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
dnl #
 | 
						|
dnl # 3.11 API change
 | 
						|
dnl # Add support for i_op->tmpfile
 | 
						|
dnl #
 | 
						|
AC_DEFUN([ZFS_AC_KERNEL_SRC_TMPFILE], [
 | 
						|
	dnl #
 | 
						|
	dnl # 6.1 API change
 | 
						|
	dnl # use struct file instead of struct dentry
 | 
						|
	dnl #
 | 
						|
	ZFS_LINUX_TEST_SRC([inode_operations_tmpfile], [
 | 
						|
		#include <linux/fs.h>
 | 
						|
		int tmpfile(struct user_namespace *userns,
 | 
						|
		    struct inode *inode, struct file *file,
 | 
						|
		    umode_t mode) { return 0; }
 | 
						|
		static struct inode_operations
 | 
						|
		    iops __attribute__ ((unused)) = {
 | 
						|
			.tmpfile = tmpfile,
 | 
						|
		};
 | 
						|
	],[])
 | 
						|
	dnl #
 | 
						|
	dnl # 5.11 API change
 | 
						|
	dnl # add support for userns parameter to tmpfile
 | 
						|
	dnl #
 | 
						|
	ZFS_LINUX_TEST_SRC([inode_operations_tmpfile_dentry_userns], [
 | 
						|
		#include <linux/fs.h>
 | 
						|
		int tmpfile(struct user_namespace *userns,
 | 
						|
		    struct inode *inode, struct dentry *dentry,
 | 
						|
		    umode_t mode) { return 0; }
 | 
						|
		static struct inode_operations
 | 
						|
		    iops __attribute__ ((unused)) = {
 | 
						|
			.tmpfile = tmpfile,
 | 
						|
		};
 | 
						|
	],[])
 | 
						|
	ZFS_LINUX_TEST_SRC([inode_operations_tmpfile_dentry], [
 | 
						|
			#include <linux/fs.h>
 | 
						|
			int tmpfile(struct inode *inode, struct dentry *dentry,
 | 
						|
			    umode_t mode) { return 0; }
 | 
						|
			static struct inode_operations
 | 
						|
			    iops __attribute__ ((unused)) = {
 | 
						|
				.tmpfile = tmpfile,
 | 
						|
			};
 | 
						|
	],[])
 | 
						|
])
 | 
						|
 | 
						|
AC_DEFUN([ZFS_AC_KERNEL_TMPFILE], [
 | 
						|
	AC_MSG_CHECKING([whether i_op->tmpfile() exists])
 | 
						|
	ZFS_LINUX_TEST_RESULT([inode_operations_tmpfile], [
 | 
						|
		AC_MSG_RESULT(yes)
 | 
						|
		AC_DEFINE(HAVE_TMPFILE, 1, [i_op->tmpfile() exists])
 | 
						|
		AC_DEFINE(HAVE_TMPFILE_USERNS, 1, [i_op->tmpfile() has userns])
 | 
						|
	],[
 | 
						|
		ZFS_LINUX_TEST_RESULT([inode_operations_tmpfile_dentry_userns], [
 | 
						|
			AC_MSG_RESULT(yes)
 | 
						|
			AC_DEFINE(HAVE_TMPFILE, 1, [i_op->tmpfile() exists])
 | 
						|
			AC_DEFINE(HAVE_TMPFILE_USERNS, 1, [i_op->tmpfile() has userns])
 | 
						|
			AC_DEFINE(HAVE_TMPFILE_DENTRY, 1, [i_op->tmpfile() uses old dentry signature])
 | 
						|
		],[
 | 
						|
			ZFS_LINUX_TEST_RESULT([inode_operations_tmpfile_dentry], [
 | 
						|
				AC_MSG_RESULT(yes)
 | 
						|
				AC_DEFINE(HAVE_TMPFILE, 1, [i_op->tmpfile() exists])
 | 
						|
				AC_DEFINE(HAVE_TMPFILE_DENTRY, 1, [i_op->tmpfile() uses old dentry signature])
 | 
						|
			],[
 | 
						|
				ZFS_LINUX_REQUIRE_API([i_op->tmpfile()], [3.11])
 | 
						|
			])
 | 
						|
		])
 | 
						|
	])
 | 
						|
])
 |