94 lines
3.5 KiB
Diff
94 lines
3.5 KiB
Diff
From b3a634a491da35d47a5e6e6120a21cba514fc3ec Mon Sep 17 00:00:00 2001
|
|
From: JackM
|
|
Date: Wed, 30 Sep 2015 23:16:40 +0300
|
|
Subject: [PATCH] vmhgfs support linux 4.2.x kernel
|
|
|
|
---
|
|
modules/linux/vmhgfs/link.c | 30 +++++++++++++++++++++++++-----
|
|
1 file changed, 25 insertions(+), 5 deletions(-)
|
|
|
|
diff --git a/open-vm-tools/modules/linux/vmhgfs/link.c b/open-vm-tools/modules/linux/vmhgfs/link.c
|
|
index 06f693b..72e97ff 100644
|
|
--- a/open-vm-tools/modules/linux/vmhgfs/link.c
|
|
+++ b/open-vm-tools/modules/linux/vmhgfs/link.c
|
|
@@ -35,7 +35,9 @@
|
|
#include "vm_assert.h"
|
|
|
|
/* HGFS symlink operations. */
|
|
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 13)
|
|
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 2, 0)
|
|
+static void *HgfsFollowlink(struct dentry *dentry, void **cookie, struct nameidata *nd);
|
|
+#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 13)
|
|
static void *HgfsFollowlink(struct dentry *dentry,
|
|
struct nameidata *nd);
|
|
#else
|
|
@@ -45,7 +47,10 @@ static int HgfsFollowlink(struct dentry *dentry,
|
|
static int HgfsReadlink(struct dentry *dentry,
|
|
char __user *buffer,
|
|
int buflen);
|
|
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 13)
|
|
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 2, 0)
|
|
+static void HgfsPutlink(struct dentry *dentry,
|
|
+ void *cookie);
|
|
+#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 13)
|
|
static void HgfsPutlink(struct dentry *dentry,
|
|
struct nameidata *nd,
|
|
void *cookie);
|
|
@@ -85,7 +90,9 @@ struct inode_operations HgfsLinkInodeOperations = {
|
|
*----------------------------------------------------------------------
|
|
*/
|
|
|
|
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 13)
|
|
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 2, 0)
|
|
+static void *HgfsFollowlink(struct dentry *dentry, void **cookie, struct nameidata *nd)
|
|
+#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 13)
|
|
static void *
|
|
HgfsFollowlink(struct dentry *dentry, // IN: Dentry containing link
|
|
struct nameidata *nd) // OUT: Contains target dentry
|
|
@@ -124,7 +131,11 @@ HgfsFollowlink(struct dentry *dentry, // IN: Dentry containing link
|
|
} else {
|
|
LOG(6, (KERN_DEBUG "VMware hgfs: %s: calling nd_set_link %s\n",
|
|
__func__, fileName));
|
|
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 2, 0)
|
|
+ *cookie = fileName;
|
|
+#else
|
|
nd_set_link(nd, fileName);
|
|
+#endif
|
|
}
|
|
}
|
|
out:
|
|
@@ -219,7 +230,10 @@ HgfsReadlink(struct dentry *dentry, // IN: Dentry containing link
|
|
*----------------------------------------------------------------------
|
|
*/
|
|
|
|
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 13)
|
|
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 2, 0)
|
|
+static void HgfsPutlink(struct dentry *dentry,
|
|
+ void *cookie)
|
|
+#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 13)
|
|
static void
|
|
HgfsPutlink(struct dentry *dentry, // dentry
|
|
struct nameidata *nd, // lookup name information
|
|
@@ -235,11 +249,17 @@ HgfsPutlink(struct dentry *dentry, // dentry
|
|
LOG(6, (KERN_DEBUG "VMware hgfs: %s: put for %s\n",
|
|
__func__, dentry->d_name.name));
|
|
|
|
- fileName = nd_get_link(nd);
|
|
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 2, 0)
|
|
+ fileName = cookie;
|
|
+#else
|
|
+ fileName = nd_get_link(nd);
|
|
+#endif
|
|
if (!IS_ERR(fileName)) {
|
|
LOG(6, (KERN_DEBUG "VMware hgfs: %s: putting %s\n",
|
|
__func__, fileName));
|
|
kfree(fileName);
|
|
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 2, 0)
|
|
nd_set_link(nd, NULL);
|
|
+#endif
|
|
}
|
|
}
|
|
--
|
|
2.5.0.windows.1
|
|
|