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