mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2024-12-27 03:19:35 +03:00
86db35c447
Open files, which aren't present in the snapshot, which is being roll-backed to, need to disappear from the visible VFS image of the dataset. Kernel provides d_drop function to drop invalid entry from the dcache, but inode can be referenced by dentry multiple dentries. The introduced zpl_d_drop_aliases function walks and invalidates all aliases of an inode. Reviewed-by: Ryan Moeller <ryan@iXsystems.com> Reviewed-by: Alexander Motin <mav@FreeBSD.org> Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Pavel Snajdr <snajpa@snajpa.net> Closes #9600 Closes #14070
31 lines
762 B
Plaintext
31 lines
762 B
Plaintext
dnl #
|
|
dnl # 3.18 API change
|
|
dnl # Dentry aliases are in d_u struct dentry member
|
|
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)
|
|
])
|
|
])
|
|
|