summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrian Behlendorf <[email protected]>2015-08-19 14:48:21 -0700
committerBrian Behlendorf <[email protected]>2015-08-19 16:03:29 -0700
commitebc2c9374bde0c53837e7c909809697088615a88 (patch)
tree50419a89f56242b7f5a1324f2c78a67f37255e52
parent851a549305ad9001e7a6dfbf735f501b286e9d08 (diff)
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 <[email protected]> Issue zfsonlinux/zfs#3653
-rw-r--r--module/splat/splat-internal.h1
-rw-r--r--module/splat/splat-vnode.c6
2 files changed, 7 insertions, 0 deletions
diff --git a/module/splat/splat-internal.h b/module/splat/splat-internal.h
index 832132696..d00af90fa 100644
--- a/module/splat/splat-internal.h
+++ b/module/splat/splat-internal.h
@@ -28,6 +28,7 @@
#include "splat-ctl.h"
#include <sys/mutex.h>
#include <linux/file_compat.h>
+#include <linux/version.h>
#define SPLAT_SUBSYSTEM_INIT(type) \
({ splat_subsystem_t *_sub_; \
diff --git a/module/splat/splat-vnode.c b/module/splat/splat-vnode.c
index f3f17ec92..bffcf492f 100644
--- a/module/splat/splat-vnode.c
+++ b/module/splat/splat-vnode.c
@@ -223,6 +223,7 @@ out:
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 @@ out:
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);