mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-26 12:12:13 +03:00
Linux 7.1: access dentry d_alias directly
The d_u union introduced in 3.18 is now anonymous, so we need to detect
it and decide the right way to name d_alias.
Note that we used to have support for both names to support kernels
before 3.18, so this commit is effectively reverting the commit that
removed that support, efc293e371.
Sponsored-by: TrueNAS
Reviewed-by: Tony Hutter <hutter2@llnl.gov>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Rob Norris <rob.norris@truenas.com>
Closes #18471
This commit is contained in:
@@ -0,0 +1,32 @@
|
|||||||
|
dnl # SPDX-License-Identifier: CDDL-1.0
|
||||||
|
dnl #
|
||||||
|
dnl # 7.1 API change
|
||||||
|
dnl # d_u union in struct dentry is now anonmymous, so d_alias must be
|
||||||
|
dnl # named directly
|
||||||
|
dnl #
|
||||||
|
AC_DEFUN([ZFS_AC_KERNEL_SRC_DENTRY_ALIAS_D_U], [
|
||||||
|
ZFS_LINUX_TEST_SRC([dentry_alias_d_u], [
|
||||||
|
#include <linux/fs.h>
|
||||||
|
#include <linux/dcache.h>
|
||||||
|
#include <linux/list.h>
|
||||||
|
], [
|
||||||
|
struct inode *inode __attribute__ ((unused)) = NULL;
|
||||||
|
struct dentry *dentry __attribute__ ((unused)) = NULL;
|
||||||
|
hlist_for_each_entry(dentry, &inode->i_dentry,
|
||||||
|
d_u.d_alias) {
|
||||||
|
d_drop(dentry);
|
||||||
|
}
|
||||||
|
])
|
||||||
|
])
|
||||||
|
|
||||||
|
AC_DEFUN([ZFS_AC_KERNEL_DENTRY_ALIAS_D_U], [
|
||||||
|
AC_MSG_CHECKING([whether dentry aliases are in d_u member])
|
||||||
|
ZFS_LINUX_TEST_RESULT([dentry_alias_d_u], [
|
||||||
|
AC_MSG_RESULT(yes)
|
||||||
|
AC_DEFINE(HAVE_DENTRY_D_U_ALIASES, 1,
|
||||||
|
[dentry aliases are in d_u member])
|
||||||
|
],[
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
])
|
||||||
|
])
|
||||||
|
|
||||||
@@ -73,6 +73,7 @@ AC_DEFUN([ZFS_AC_KERNEL_TEST_SRC], [
|
|||||||
ZFS_AC_KERNEL_SRC_SETATTR_PREPARE
|
ZFS_AC_KERNEL_SRC_SETATTR_PREPARE
|
||||||
ZFS_AC_KERNEL_SRC_INSERT_INODE_LOCKED
|
ZFS_AC_KERNEL_SRC_INSERT_INODE_LOCKED
|
||||||
ZFS_AC_KERNEL_SRC_DENTRY
|
ZFS_AC_KERNEL_SRC_DENTRY
|
||||||
|
ZFS_AC_KERNEL_SRC_DENTRY_ALIAS_D_U
|
||||||
ZFS_AC_KERNEL_SRC_TRUNCATE_SETSIZE
|
ZFS_AC_KERNEL_SRC_TRUNCATE_SETSIZE
|
||||||
ZFS_AC_KERNEL_SRC_SECURITY_INODE
|
ZFS_AC_KERNEL_SRC_SECURITY_INODE
|
||||||
ZFS_AC_KERNEL_SRC_FS_CONTEXT
|
ZFS_AC_KERNEL_SRC_FS_CONTEXT
|
||||||
@@ -196,6 +197,7 @@ AC_DEFUN([ZFS_AC_KERNEL_TEST_RESULT], [
|
|||||||
ZFS_AC_KERNEL_SETATTR_PREPARE
|
ZFS_AC_KERNEL_SETATTR_PREPARE
|
||||||
ZFS_AC_KERNEL_INSERT_INODE_LOCKED
|
ZFS_AC_KERNEL_INSERT_INODE_LOCKED
|
||||||
ZFS_AC_KERNEL_DENTRY
|
ZFS_AC_KERNEL_DENTRY
|
||||||
|
ZFS_AC_KERNEL_DENTRY_ALIAS_D_U
|
||||||
ZFS_AC_KERNEL_TRUNCATE_SETSIZE
|
ZFS_AC_KERNEL_TRUNCATE_SETSIZE
|
||||||
ZFS_AC_KERNEL_SECURITY_INODE
|
ZFS_AC_KERNEL_SECURITY_INODE
|
||||||
ZFS_AC_KERNEL_FS_CONTEXT
|
ZFS_AC_KERNEL_FS_CONTEXT
|
||||||
|
|||||||
@@ -32,7 +32,9 @@
|
|||||||
#define dname(dentry) ((char *)((dentry)->d_name.name))
|
#define dname(dentry) ((char *)((dentry)->d_name.name))
|
||||||
#define dlen(dentry) ((int)((dentry)->d_name.len))
|
#define dlen(dentry) ((int)((dentry)->d_name.len))
|
||||||
|
|
||||||
|
#ifdef HAVE_DENTRY_D_U_ALIASES
|
||||||
#define d_alias d_u.d_alias
|
#define d_alias d_u.d_alias
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_MM_PAGE_FLAGS_STRUCT
|
#ifdef HAVE_MM_PAGE_FLAGS_STRUCT
|
||||||
/*
|
/*
|
||||||
|
|||||||
Reference in New Issue
Block a user