mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2025-02-22 15:04:22 +03:00

Linux kernel 6.3 changed a bunch of APIs to use the dedicated idmap type for mounts (struct mnt_idmap), we need to detect these changes and make zfs work with the new APIs. NOTE: This backport only includes the configure checks to detect the 6.3 idmap API changes. It does not include support for idmap. When provided the idmap variable is ignored in most case in the same way the user_ns argument was ignored. This change is solely to provide compatibility with the new interfaces. Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Youzhong Yang <yyang@mathworks.com> Closes #14682
81 lines
2.0 KiB
Plaintext
81 lines
2.0 KiB
Plaintext
AC_DEFUN([ZFS_AC_KERNEL_SRC_CREATE], [
|
|
dnl #
|
|
dnl # 6.3 API change
|
|
dnl # The first arg is changed to struct mnt_idmap *
|
|
dnl #
|
|
ZFS_LINUX_TEST_SRC([create_mnt_idmap], [
|
|
#include <linux/fs.h>
|
|
#include <linux/sched.h>
|
|
|
|
int inode_create(struct mnt_idmap *idmap,
|
|
struct inode *inode ,struct dentry *dentry,
|
|
umode_t umode, bool flag) { return 0; }
|
|
|
|
static const struct inode_operations
|
|
iops __attribute__ ((unused)) = {
|
|
.create = inode_create,
|
|
};
|
|
],[])
|
|
|
|
dnl #
|
|
dnl # 5.12 API change that added the struct user_namespace* arg
|
|
dnl # to the front of this function type's arg list.
|
|
dnl #
|
|
ZFS_LINUX_TEST_SRC([create_userns], [
|
|
#include <linux/fs.h>
|
|
#include <linux/sched.h>
|
|
|
|
int inode_create(struct user_namespace *userns,
|
|
struct inode *inode ,struct dentry *dentry,
|
|
umode_t umode, bool flag) { return 0; }
|
|
|
|
static const struct inode_operations
|
|
iops __attribute__ ((unused)) = {
|
|
.create = inode_create,
|
|
};
|
|
],[])
|
|
|
|
dnl #
|
|
dnl # 3.6 API change
|
|
dnl #
|
|
ZFS_LINUX_TEST_SRC([create_flags], [
|
|
#include <linux/fs.h>
|
|
#include <linux/sched.h>
|
|
|
|
int inode_create(struct inode *inode ,struct dentry *dentry,
|
|
umode_t umode, bool flag) { return 0; }
|
|
|
|
static const struct inode_operations
|
|
iops __attribute__ ((unused)) = {
|
|
.create = inode_create,
|
|
};
|
|
],[])
|
|
])
|
|
|
|
AC_DEFUN([ZFS_AC_KERNEL_CREATE], [
|
|
AC_MSG_CHECKING([whether iops->create() takes struct mnt_idmap*])
|
|
ZFS_LINUX_TEST_RESULT([create_mnt_idmap], [
|
|
AC_MSG_RESULT(yes)
|
|
AC_DEFINE(HAVE_IOPS_CREATE_IDMAP, 1,
|
|
[iops->create() takes struct mnt_idmap*])
|
|
],[
|
|
AC_MSG_RESULT(no)
|
|
|
|
AC_MSG_CHECKING([whether iops->create() takes struct user_namespace*])
|
|
ZFS_LINUX_TEST_RESULT([create_userns], [
|
|
AC_MSG_RESULT(yes)
|
|
AC_DEFINE(HAVE_IOPS_CREATE_USERNS, 1,
|
|
[iops->create() takes struct user_namespace*])
|
|
],[
|
|
AC_MSG_RESULT(no)
|
|
|
|
AC_MSG_CHECKING([whether iops->create() passes flags])
|
|
ZFS_LINUX_TEST_RESULT([create_flags], [
|
|
AC_MSG_RESULT(yes)
|
|
],[
|
|
ZFS_LINUX_TEST_ERROR([iops->create()])
|
|
])
|
|
])
|
|
])
|
|
])
|