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
75 lines
2.2 KiB
Plaintext
75 lines
2.2 KiB
Plaintext
AC_DEFUN([ZFS_AC_KERNEL_SRC_SETATTR_PREPARE], [
|
|
dnl #
|
|
dnl # 4.9 API change
|
|
dnl # The inode_change_ok() function has been renamed setattr_prepare()
|
|
dnl # and updated to take a dentry rather than an inode.
|
|
dnl #
|
|
ZFS_LINUX_TEST_SRC([setattr_prepare], [
|
|
#include <linux/fs.h>
|
|
], [
|
|
struct dentry *dentry = NULL;
|
|
struct iattr *attr = NULL;
|
|
int error __attribute__ ((unused)) =
|
|
setattr_prepare(dentry, attr);
|
|
])
|
|
|
|
dnl #
|
|
dnl # 5.12 API change
|
|
dnl # The setattr_prepare() function has been changed to accept a new argument
|
|
dnl # for struct user_namespace*
|
|
dnl #
|
|
ZFS_LINUX_TEST_SRC([setattr_prepare_userns], [
|
|
#include <linux/fs.h>
|
|
], [
|
|
struct dentry *dentry = NULL;
|
|
struct iattr *attr = NULL;
|
|
struct user_namespace *userns = NULL;
|
|
int error __attribute__ ((unused)) =
|
|
setattr_prepare(userns, dentry, attr);
|
|
])
|
|
|
|
dnl #
|
|
dnl # 6.3 API change
|
|
dnl # The first arg of setattr_prepare() is changed to struct mnt_idmap*
|
|
dnl #
|
|
ZFS_LINUX_TEST_SRC([setattr_prepare_mnt_idmap], [
|
|
#include <linux/fs.h>
|
|
], [
|
|
struct dentry *dentry = NULL;
|
|
struct iattr *attr = NULL;
|
|
struct mnt_idmap *idmap = NULL;
|
|
int error __attribute__ ((unused)) =
|
|
setattr_prepare(idmap, dentry, attr);
|
|
])
|
|
])
|
|
|
|
AC_DEFUN([ZFS_AC_KERNEL_SETATTR_PREPARE], [
|
|
AC_MSG_CHECKING([whether setattr_prepare() is available and accepts struct mnt_idmap*])
|
|
ZFS_LINUX_TEST_RESULT_SYMBOL([setattr_prepare_mnt_idmap],
|
|
[setattr_prepare], [fs/attr.c], [
|
|
AC_MSG_RESULT(yes)
|
|
AC_DEFINE(HAVE_SETATTR_PREPARE_IDMAP, 1,
|
|
[setattr_prepare() accepts mnt_idmap])
|
|
], [
|
|
AC_MSG_CHECKING([whether setattr_prepare() is available and accepts struct user_namespace*])
|
|
ZFS_LINUX_TEST_RESULT_SYMBOL([setattr_prepare_userns],
|
|
[setattr_prepare], [fs/attr.c], [
|
|
AC_MSG_RESULT(yes)
|
|
AC_DEFINE(HAVE_SETATTR_PREPARE_USERNS, 1,
|
|
[setattr_prepare() accepts user_namespace])
|
|
], [
|
|
AC_MSG_RESULT(no)
|
|
|
|
AC_MSG_CHECKING([whether setattr_prepare() is available, doesn't accept user_namespace])
|
|
ZFS_LINUX_TEST_RESULT_SYMBOL([setattr_prepare],
|
|
[setattr_prepare], [fs/attr.c], [
|
|
AC_MSG_RESULT(yes)
|
|
AC_DEFINE(HAVE_SETATTR_PREPARE_NO_USERNS, 1,
|
|
[setattr_prepare() is available, doesn't accept user_namespace])
|
|
], [
|
|
AC_MSG_RESULT(no)
|
|
])
|
|
])
|
|
])
|
|
])
|