mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2024-12-26 11:19:32 +03:00
7ae3f8dc8f
Reinstate the zpl_revalidate() functionality to resolve a regression where dentries for open files during a rollback are not invalidated. The unrelated functionality for automatically unmounting .zfs/snapshots was not reverted. Nor was the addition of shrink_dcache_sb() to the zfs_resume_fs() function. This issue was not immediately caught by the CI because the test case intended to catch it was included in the list of ZTS tests which may occasionally fail for unrelated reasons. Remove all of the rollback tests from this list to help identify the frequency of any spurious failures. The rollback_003_pos.ksh test case exposes a real issue with the long standing code which needs to be investigated. Regardless, it has been enable with a small workaround in the test case itself. Reviewed-by: Matt Ahrens <matt@delphix.com> Reviewed-by: Pavel Snajdr <snajpa@snajpa.net> Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> Closes #9587 Closes #9592
191 lines
4.7 KiB
Plaintext
191 lines
4.7 KiB
Plaintext
dnl #
|
|
dnl # 3.4.0 API change
|
|
dnl # Added d_make_root() to replace previous d_alloc_root() function.
|
|
dnl #
|
|
AC_DEFUN([ZFS_AC_KERNEL_SRC_D_MAKE_ROOT], [
|
|
ZFS_LINUX_TEST_SRC([d_make_root], [
|
|
#include <linux/dcache.h>
|
|
], [
|
|
d_make_root(NULL);
|
|
])
|
|
])
|
|
|
|
AC_DEFUN([ZFS_AC_KERNEL_D_MAKE_ROOT], [
|
|
AC_MSG_CHECKING([whether d_make_root() is available])
|
|
ZFS_LINUX_TEST_RESULT_SYMBOL([d_make_root],
|
|
[d_make_root], [fs/dcache.c], [
|
|
AC_MSG_RESULT(yes)
|
|
AC_DEFINE(HAVE_D_MAKE_ROOT, 1, [d_make_root() is available])
|
|
], [
|
|
AC_MSG_RESULT(no)
|
|
])
|
|
])
|
|
|
|
dnl #
|
|
dnl # 2.6.28 API change
|
|
dnl # Added d_obtain_alias() helper function.
|
|
dnl #
|
|
AC_DEFUN([ZFS_AC_KERNEL_SRC_D_OBTAIN_ALIAS], [
|
|
ZFS_LINUX_TEST_SRC([d_obtain_alias], [
|
|
#include <linux/dcache.h>
|
|
], [
|
|
d_obtain_alias(NULL);
|
|
])
|
|
])
|
|
|
|
AC_DEFUN([ZFS_AC_KERNEL_D_OBTAIN_ALIAS], [
|
|
AC_MSG_CHECKING([whether d_obtain_alias() is available])
|
|
ZFS_LINUX_TEST_RESULT_SYMBOL([d_obtain_alias],
|
|
[d_obtain_alias], [fs/dcache.c], [
|
|
AC_MSG_RESULT(yes)
|
|
], [
|
|
ZFS_LINUX_TEST_ERROR([d_obtain_alias()])
|
|
])
|
|
])
|
|
|
|
dnl #
|
|
dnl # 2.6.12 API change
|
|
dnl # d_prune_aliases() helper function available.
|
|
dnl #
|
|
AC_DEFUN([ZFS_AC_KERNEL_SRC_D_PRUNE_ALIASES], [
|
|
ZFS_LINUX_TEST_SRC([d_prune_aliases], [
|
|
#include <linux/dcache.h>
|
|
], [
|
|
struct inode *ip = NULL;
|
|
d_prune_aliases(ip);
|
|
])
|
|
])
|
|
|
|
AC_DEFUN([ZFS_AC_KERNEL_D_PRUNE_ALIASES], [
|
|
AC_MSG_CHECKING([whether d_prune_aliases() is available])
|
|
ZFS_LINUX_TEST_RESULT_SYMBOL([d_prune_aliases],
|
|
[d_prune_aliases], [fs/dcache.c], [
|
|
AC_MSG_RESULT(yes)
|
|
AC_DEFINE(HAVE_D_PRUNE_ALIASES, 1,
|
|
[d_prune_aliases() is available])
|
|
], [
|
|
ZFS_LINUX_TEST_ERROR([d_prune_aliases()])
|
|
])
|
|
])
|
|
|
|
dnl #
|
|
dnl # 2.6.38 API change
|
|
dnl # Added d_set_d_op() helper function.
|
|
dnl #
|
|
AC_DEFUN([ZFS_AC_KERNEL_SRC_D_SET_D_OP], [
|
|
ZFS_LINUX_TEST_SRC([d_set_d_op], [
|
|
#include <linux/dcache.h>
|
|
], [
|
|
d_set_d_op(NULL, NULL);
|
|
])
|
|
])
|
|
|
|
AC_DEFUN([ZFS_AC_KERNEL_D_SET_D_OP], [
|
|
AC_MSG_CHECKING([whether d_set_d_op() is available])
|
|
ZFS_LINUX_TEST_RESULT_SYMBOL([d_set_d_op],
|
|
[d_set_d_op], [fs/dcache.c], [
|
|
AC_MSG_RESULT(yes)
|
|
], [
|
|
ZFS_LINUX_TEST_ERROR([d_set_d_op])
|
|
])
|
|
])
|
|
|
|
dnl #
|
|
dnl # 3.6 API change
|
|
dnl #
|
|
AC_DEFUN([ZFS_AC_KERNEL_SRC_D_REVALIDATE_NAMEIDATA], [
|
|
ZFS_LINUX_TEST_SRC([dentry_operations_revalidate], [
|
|
#include <linux/dcache.h>
|
|
#include <linux/sched.h>
|
|
|
|
int revalidate (struct dentry *dentry,
|
|
struct nameidata *nidata) { return 0; }
|
|
|
|
static const struct dentry_operations
|
|
dops __attribute__ ((unused)) = {
|
|
.d_revalidate = revalidate,
|
|
};
|
|
],[])
|
|
])
|
|
|
|
AC_DEFUN([ZFS_AC_KERNEL_D_REVALIDATE_NAMEIDATA], [
|
|
AC_MSG_CHECKING([whether dops->d_revalidate() takes struct nameidata])
|
|
ZFS_LINUX_TEST_RESULT([dentry_operations_revalidate], [
|
|
AC_MSG_RESULT(yes)
|
|
AC_DEFINE(HAVE_D_REVALIDATE_NAMEIDATA, 1,
|
|
[dops->d_revalidate() operation takes nameidata])
|
|
],[
|
|
AC_MSG_RESULT(no)
|
|
])
|
|
])
|
|
|
|
dnl #
|
|
dnl # 2.6.30 API change
|
|
dnl # The 'struct dentry_operations' was constified in the dentry structure.
|
|
dnl #
|
|
AC_DEFUN([ZFS_AC_KERNEL_SRC_CONST_DENTRY_OPERATIONS], [
|
|
ZFS_LINUX_TEST_SRC([dentry_operations_const], [
|
|
#include <linux/dcache.h>
|
|
|
|
const struct dentry_operations test_d_op = {
|
|
.d_revalidate = NULL,
|
|
};
|
|
],[
|
|
struct dentry d __attribute__ ((unused));
|
|
d.d_op = &test_d_op;
|
|
])
|
|
])
|
|
|
|
AC_DEFUN([ZFS_AC_KERNEL_CONST_DENTRY_OPERATIONS], [
|
|
AC_MSG_CHECKING([whether dentry uses const struct dentry_operations])
|
|
ZFS_LINUX_TEST_RESULT([dentry_operations_const], [
|
|
AC_MSG_RESULT(yes)
|
|
AC_DEFINE(HAVE_CONST_DENTRY_OPERATIONS, 1,
|
|
[dentry uses const struct dentry_operations])
|
|
],[
|
|
ZFS_LINUX_TEST_ERROR([const dentry_operations])
|
|
])
|
|
])
|
|
|
|
dnl #
|
|
dnl # 2.6.38 API change
|
|
dnl # Added sb->s_d_op default dentry_operations member
|
|
dnl #
|
|
AC_DEFUN([ZFS_AC_KERNEL_SRC_S_D_OP], [
|
|
ZFS_LINUX_TEST_SRC([super_block_s_d_op], [
|
|
#include <linux/fs.h>
|
|
],[
|
|
struct super_block sb __attribute__ ((unused));
|
|
sb.s_d_op = NULL;
|
|
])
|
|
])
|
|
|
|
AC_DEFUN([ZFS_AC_KERNEL_S_D_OP], [
|
|
AC_MSG_CHECKING([whether super_block has s_d_op])
|
|
ZFS_LINUX_TEST_RESULT([super_block_s_d_op], [
|
|
AC_MSG_RESULT(yes)
|
|
], [
|
|
ZFS_LINUX_TEST_ERROR([super_block s_d_op])
|
|
])
|
|
])
|
|
|
|
AC_DEFUN([ZFS_AC_KERNEL_SRC_DENTRY], [
|
|
ZFS_AC_KERNEL_SRC_D_MAKE_ROOT
|
|
ZFS_AC_KERNEL_SRC_D_OBTAIN_ALIAS
|
|
ZFS_AC_KERNEL_SRC_D_PRUNE_ALIASES
|
|
ZFS_AC_KERNEL_SRC_D_SET_D_OP
|
|
ZFS_AC_KERNEL_SRC_D_REVALIDATE_NAMEIDATA
|
|
ZFS_AC_KERNEL_SRC_CONST_DENTRY_OPERATIONS
|
|
ZFS_AC_KERNEL_SRC_S_D_OP
|
|
])
|
|
|
|
AC_DEFUN([ZFS_AC_KERNEL_DENTRY], [
|
|
ZFS_AC_KERNEL_D_MAKE_ROOT
|
|
ZFS_AC_KERNEL_D_OBTAIN_ALIAS
|
|
ZFS_AC_KERNEL_D_PRUNE_ALIASES
|
|
ZFS_AC_KERNEL_D_SET_D_OP
|
|
ZFS_AC_KERNEL_D_REVALIDATE_NAMEIDATA
|
|
ZFS_AC_KERNEL_CONST_DENTRY_OPERATIONS
|
|
ZFS_AC_KERNEL_S_D_OP
|
|
])
|