mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-24 19:28:53 +03:00
Remove zpl_revalidate: fix snapshot rollback
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
This commit is contained in:
committed by
Brian Behlendorf
parent
e09fdda977
commit
86db35c447
@@ -0,0 +1,30 @@
|
||||
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)
|
||||
])
|
||||
])
|
||||
|
||||
Reference in New Issue
Block a user