From ebc2c9374bde0c53837e7c909809697088615a88 Mon Sep 17 00:00:00 2001 From: Brian Behlendorf Date: Wed, 19 Aug 2015 14:48:21 -0700 Subject: [PATCH] Linux 4.2 compat: vfs_rename() Attempting to perform a vfs_rename() on Linux 4.2 and newer kernels results in an EACCES error. Rather than attempting to add and maintain more ugly compatibility code it's best to just retire this interface. As a first step the SPLAT test is disabled for Linux 4.2 and newer kernels. vn_rename: Failed vn_rename /tmp/vn.tmp.1 -> /tmp/vn.tmp.2 (13) Signed-off-by: Brian Behlendorf Issue zfsonlinux/zfs#3653 --- module/splat/splat-internal.h | 1 + module/splat/splat-vnode.c | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/module/splat/splat-internal.h b/module/splat/splat-internal.h index 832132696d88..d00af90fa748 100644 --- a/module/splat/splat-internal.h +++ b/module/splat/splat-internal.h @@ -28,6 +28,7 @@ #include "splat-ctl.h" #include #include +#include #define SPLAT_SUBSYSTEM_INIT(type) \ ({ splat_subsystem_t *_sub_; \ diff --git a/module/splat/splat-vnode.c b/module/splat/splat-vnode.c index f3f17ec92566..bffcf492ff5d 100644 --- a/module/splat/splat-vnode.c +++ b/module/splat/splat-vnode.c @@ -223,6 +223,7 @@ splat_vnode_test3(struct file *file, void *arg) return -rc; } /* splat_vnode_test3() */ +#if LINUX_VERSION_CODE <= KERNEL_VERSION(4,1,0) static int splat_vnode_test4(struct file *file, void *arg) { @@ -303,6 +304,7 @@ splat_vnode_test4(struct file *file, void *arg) return -rc; } /* splat_vnode_test4() */ +#endif static int splat_vnode_test5(struct file *file, void *arg) @@ -413,8 +415,10 @@ splat_vnode_init(void) SPLAT_VNODE_TEST2_ID, splat_vnode_test2); SPLAT_TEST_INIT(sub, SPLAT_VNODE_TEST3_NAME, SPLAT_VNODE_TEST3_DESC, SPLAT_VNODE_TEST3_ID, splat_vnode_test3); +#if LINUX_VERSION_CODE <= KERNEL_VERSION(4,1,0) SPLAT_TEST_INIT(sub, SPLAT_VNODE_TEST4_NAME, SPLAT_VNODE_TEST4_DESC, SPLAT_VNODE_TEST4_ID, splat_vnode_test4); +#endif SPLAT_TEST_INIT(sub, SPLAT_VNODE_TEST5_NAME, SPLAT_VNODE_TEST5_DESC, SPLAT_VNODE_TEST5_ID, splat_vnode_test5); SPLAT_TEST_INIT(sub, SPLAT_VNODE_TEST6_NAME, SPLAT_VNODE_TEST6_DESC, @@ -430,7 +434,9 @@ splat_vnode_fini(splat_subsystem_t *sub) SPLAT_TEST_FINI(sub, SPLAT_VNODE_TEST6_ID); SPLAT_TEST_FINI(sub, SPLAT_VNODE_TEST5_ID); +#if LINUX_VERSION_CODE <= KERNEL_VERSION(4,1,0) SPLAT_TEST_FINI(sub, SPLAT_VNODE_TEST4_ID); +#endif SPLAT_TEST_FINI(sub, SPLAT_VNODE_TEST3_ID); SPLAT_TEST_FINI(sub, SPLAT_VNODE_TEST2_ID); SPLAT_TEST_FINI(sub, SPLAT_VNODE_TEST1_ID);