1 diff --git a/modules/linux/dkms.conf b/modules/linux/dkms.conf
2 index 3ed77f9..263921f 100644
3 --- a/modules/linux/dkms.conf
4 +++ b/modules/linux/dkms.conf
6 PACKAGE_NAME=open-vm-tools
7 PACKAGE_VERSION=2013.04.16
8 MAKE_CMD_TMPL="make VM_UNAME=\$kernelver \
9 - MODULEBUILDDIR=$dkms_tree/$PACKAGE_NAME/$PACKAGE_VERSION/build"
10 + MODULEBUILDDIR=$dkms_tree/$PACKAGE_NAME/$PACKAGE_VERSION/build \
11 + CC_WARNINGS=-Wno-unused-local-typedefs"
13 # The vsock module depends on symbols exported by the vmci module, so it
14 # needs to be built afterwards; the MODULEBUILDDIR variable tells the makefiles
15 # where to store / retrive those symbol files.
16 MAKE[0]="$MAKE_CMD_TMPL -C vmblock; \
17 $MAKE_CMD_TMPL -C vmci; \
18 $MAKE_CMD_TMPL -C vmhgfs; \
19 $MAKE_CMD_TMPL -C vmsync; \
20 $MAKE_CMD_TMPL -C vmxnet; \
21 $MAKE_CMD_TMPL -C vsock"
22 CLEAN[0]="$MAKE_CMD_TMPL -C vmblock clean; \
23 $MAKE_CMD_TMPL -C vmci clean; \
24 $MAKE_CMD_TMPL -C vmhgfs clean; \
25 - $MAKE_CMD_TMPL -C vmsync clean"; \
26 + $MAKE_CMD_TMPL -C vmsync clean; \
27 $MAKE_CMD_TMPL -C vmxnet clean; \
28 - $MAKE_CMD_TMPL -C vsock clean
29 + $MAKE_CMD_TMPL -C vsock clean"
30 BUILT_MODULE_NAME[0]="vmblock"
31 BUILT_MODULE_NAME[1]="vmci"
32 -BUILT_MODULE_NAME[2]="vmhgfs"
33 -BUILT_MODULE_NAME[3]="vmsync"
34 -BUILT_MODULE_NAME[4]="vmxnet"
35 -BUILT_MODULE_NAME[5]="vsock"
36 +BUILT_MODULE_NAME[1]="vmhgfs"
37 +BUILT_MODULE_NAME[2]="vmsync"
38 +BUILT_MODULE_NAME[3]="vmxnet"
39 +BUILT_MODULE_NAME[4]="vsock"
40 BUILT_MODULE_LOCATION[0]="vmblock/"
41 BUILT_MODULE_LOCATION[1]="vmci/"
42 -BUILT_MODULE_LOCATION[2]="vmhgfs/"
43 -BUILT_MODULE_LOCATION[3]="vmsync/"
44 -BUILT_MODULE_LOCATION[4]="vmxnet/"
45 -BUILT_MODULE_LOCATION[5]="vsock/"
46 +BUILT_MODULE_LOCATION[1]="vmhgfs/"
47 +BUILT_MODULE_LOCATION[2]="vmsync/"
48 +BUILT_MODULE_LOCATION[3]="vmxnet/"
49 +BUILT_MODULE_LOCATION[4]="vsock/"
50 DEST_MODULE_LOCATION[0]="/kernel/fs/vmblock"
51 -DEST_MODULE_LOCATION[1]="/kernel/drivers/misc"
52 -DEST_MODULE_LOCATION[2]="/kernel/fs/vmhgfs"
53 -DEST_MODULE_LOCATION[3]="/kernel/drivers/misc"
54 -DEST_MODULE_LOCATION[4]="/kernel/drivers/net"
55 -DEST_MODULE_LOCATION[5]="/kernel/net/vsock"
56 +DEST_MODULE_LOCATION[1]="/kernel/fs/vmhgfs"
57 +DEST_MODULE_LOCATION[2]="/kernel/drivers/misc"
58 +DEST_MODULE_LOCATION[3]="/kernel/drivers/net"
59 +DEST_MODULE_LOCATION[4]="/kernel/net/vsock"
61 diff --git a/modules/linux/vmblock/linux/control.c b/modules/linux/vmblock/linux/control.c
62 index 79716bd..ee64cdc 100644
63 --- a/modules/linux/vmblock/linux/control.c
64 +++ b/modules/linux/vmblock/linux/control.c
66 #include <linux/proc_fs.h>
67 #include <linux/stat.h>
69 +#include <linux/version.h>
71 #include <asm/uaccess.h>
73 @@ -208,9 +208,16 @@ SetupProcDevice(void)
74 VMBlockSetProcEntryOwner(controlProcMountpoint);
76 /* Create /proc/fs/vmblock/dev */
77 +#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0)
78 controlProcEntry = create_proc_entry(VMBLOCK_CONTROL_DEVNAME,
82 + controlProcEntry = proc_create(VMBLOCK_CONTROL_DEVNAME,
83 + VMBLOCK_CONTROL_MODE,
84 + controlProcDirEntry,
87 if (!controlProcEntry) {
88 Warning("SetupProcDevice: could not create " VMBLOCK_DEVICE "\n");
89 remove_proc_entry(VMBLOCK_CONTROL_MOUNTPOINT, controlProcDirEntry);
90 @@ -218,7 +219,9 @@ SetupProcDevice(void)
94 +#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0)
95 controlProcEntry->proc_fops = &ControlFileOps;
100 @@ -278,7 +278,11 @@ ExecuteBlockOp(const char __user *buf, // IN: buffer with name
101 int (*blockOp)(const char *filename, // IN: block operation
102 const os_blocker_id_t blocker))
104 +#if LINUX_VERSION_CODE < KERNEL_VERSION(3,9,0)
107 + struct filename *name;
112 @@ -287,13 +287,26 @@ ExecuteBlockOp(const char __user *buf, // IN: buffer with name
113 return PTR_ERR(name);
116 +#if LINUX_VERSION_CODE < KERNEL_VERSION(3,9,0)
117 for (i = strlen(name) - 1; i >= 0 && name[i] == '/'; i--) {
120 + for (i = strlen(name->name) - 1; i >= 0 && name->name[i] == '/'; i--) {
121 + ((char *)name->name)[i] = '\0';
125 +#if LINUX_VERSION_CODE < KERNEL_VERSION(3,9,0)
126 retval = i < 0 ? -EINVAL : blockOp(name, blocker);
128 + retval = i < 0 ? -EINVAL : blockOp(name->name, blocker);
131 +#if LINUX_VERSION_CODE < KERNEL_VERSION(3,9,0)
139 diff --git a/modules/linux/vmblock/linux/dentry.c b/modules/linux/vmblock/linux/dentry.c
140 index 05ea95a..d93b2f0 100644
141 --- a/modules/linux/vmblock/linux/dentry.c
142 +++ b/modules/linux/vmblock/linux/dentry.c
144 #include "driver-config.h"
146 #include <linux/fs.h>
147 +#include <linux/version.h>
148 #include "compat_namei.h"
149 #include "vmblockInt.h"
150 #include "filesystem.h"
155 +#if LINUX_VERSION_CODE < KERNEL_VERSION(3,9,0)
156 static int DentryOpRevalidate(struct dentry *dentry, struct nameidata *nd);
158 +static int DentryOpRevalidate(struct dentry *dentry, unsigned int flags);
161 struct dentry_operations LinkDentryOps = {
162 .d_revalidate = DentryOpRevalidate,
163 @@ -60,7 +59,11 @@ struct dentry_operations LinkDentryOps = {
166 DentryOpRevalidate(struct dentry *dentry, // IN: dentry revalidating
167 +#if LINUX_VERSION_CODE < KERNEL_VERSION(3,9,0)
168 struct nameidata *nd) // IN: lookup flags & intent
170 + unsigned int flags) // IN: lookup flags
173 VMBlockInodeInfo *iinfo;
174 struct nameidata actualNd;
175 @@ -101,7 +100,11 @@ DentryOpRevalidate(struct dentry *dentry, // IN: dentry revalidating
177 actualDentry->d_op &&
178 actualDentry->d_op->d_revalidate) {
179 +#if LINUX_VERSION_CODE < KERNEL_VERSION(3,9,0)
180 return actualDentry->d_op->d_revalidate(actualDentry, nd);
182 + return actualDentry->d_op->d_revalidate(actualDentry, flags);
186 if (compat_path_lookup(iinfo->name, 0, &actualNd)) {
187 diff --git a/modules/linux/vmblock/linux/inode.c b/modules/linux/vmblock/linux/inode.c
188 index 098c94c..ddd37f3 100644
189 --- a/modules/linux/vmblock/linux/inode.c
190 +++ b/modules/linux/vmblock/linux/inode.c
192 #include <linux/fs.h>
193 #include <linux/time.h>
194 #include <linux/namei.h>
195 +#include <linux/version.h>
197 #include "vmblockInt.h"
198 #include "filesystem.h"
201 /* Inode operations */
202 static struct dentry *InodeOpLookup(struct inode *dir,
203 +#if LINUX_VERSION_CODE < KERNEL_VERSION(3,9,0)
204 struct dentry *dentry, struct nameidata *nd);
206 + struct dentry *dentry, unsigned int flags);
208 static int InodeOpReadlink(struct dentry *dentry, char __user *buffer, int buflen);
209 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 13)
210 static void *InodeOpFollowlink(struct dentry *dentry, struct nameidata *nd);
211 @@ -75,7 +75,11 @@ static struct inode_operations LinkInodeOps = {
212 static struct dentry *
213 InodeOpLookup(struct inode *dir, // IN: parent directory's inode
214 struct dentry *dentry, // IN: dentry to lookup
215 +#if LINUX_VERSION_CODE < KERNEL_VERSION(3,9,0)
216 struct nameidata *nd) // IN: lookup intent and information
218 + unsigned int flags) // IN: lookup flags
223 diff --git a/modules/linux/vmhgfs/file.c b/modules/linux/vmhgfs/file.c
224 index 1033984..db62070 100644
225 --- a/modules/linux/vmhgfs/file.c
226 +++ b/modules/linux/vmhgfs/file.c
228 /* Must come before any kernel header file. */
229 #include "driver-config.h"
231 +#include <linux/aio.h>
232 #include <linux/errno.h>
233 #include <linux/module.h>
234 #include <linux/signal.h>
235 +#include <linux/version.h>
236 #include "compat_cred.h"
237 #include "compat_fs.h"
238 #include "compat_kernel.h"
239 diff --git a/modules/linux/vmsync/sync.c b/modules/linux/vmsync/sync.c
240 index d05ccad..73baf8b 100644
241 --- a/modules/linux/vmsync/sync.c
242 +++ b/modules/linux/vmsync/sync.c
244 #include <asm/string.h>
245 #include <linux/buffer_head.h>
246 #include <linux/proc_fs.h>
247 +#include <linux/version.h>
249 #include "compat_fs.h"
250 #include "compat_module.h"
251 @@ -162,7 +162,11 @@ VmSyncThawDevices(void *_state) // IN
252 cancel_delayed_work(&state->thawTask);
253 list_for_each_safe(cur, tmp, &state->devices) {
254 dev = list_entry(cur, VmSyncBlockDevice, list);
255 +#if LINUX_VERSION_CODE < KERNEL_VERSION(3,9,0)
256 if (dev->sb != NULL && dev->sb->s_frozen != SB_UNFROZEN) {
258 + if (dev->sb != NULL && dev->sb->s_writers.frozen != SB_UNFROZEN) {
260 thaw_bdev(dev->bdev, dev->sb);
261 atomic_dec(&gFreezeCount);
263 @@ -237,7 +237,11 @@ VmSyncAddPath(const VmSyncState *state, // IN
264 * the superblock is already frozen.
266 if (inode->i_sb->s_bdev == NULL ||
267 +#if LINUX_VERSION_CODE < KERNEL_VERSION(3,9,0)
268 inode->i_sb->s_frozen != SB_UNFROZEN) {
270 + inode->i_sb->s_writers.frozen != SB_UNFROZEN) {
272 result = (inode->i_sb->s_bdev == NULL) ? -EINVAL : -EALREADY;
273 compat_path_release(&nd);
275 @@ -303,7 +303,11 @@ VmSyncFreezeDevices(VmSyncState *state, // IN
276 const char __user *userPaths) // IN
279 +#if LINUX_VERSION_CODE < KERNEL_VERSION(3,9,0)
282 + struct filename *paths;
286 struct list_head *cur, *tmp;
287 @@ -328,7 +328,12 @@ VmSyncFreezeDevices(VmSyncState *state, // IN
289 * First, try to add all paths to the list of paths to be frozen.
291 +#if LINUX_VERSION_CODE < KERNEL_VERSION(3,9,0)
294 + currPath = __getname();
295 + strcpy(currPath, paths->name);
298 nextSep = strchr(currPath, ':');
299 if (nextSep != NULL) {
300 @@ -347,6 +348,9 @@ VmSyncFreezeDevices(VmSyncState *state, // IN
302 currPath = nextSep + 1;
303 } while (nextSep != NULL);
304 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,9,0)
305 + __putname(currPath);
309 * If adding all the requested paths worked, then freeze them.
310 @@ -371,6 +373,10 @@ VmSyncFreezeDevices(VmSyncState *state, // IN
311 compat_mutex_unlock(&state->lock);
312 compat_mutex_unlock(&gFreezeLock);
314 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,9,0)
319 compat_schedule_delayed_work(&state->thawTask, VMSYNC_THAW_TASK_DELAY);
321 @@ -670,9 +674,16 @@ init_module(void)
324 /* Create /proc/driver/vmware-sync */
325 +#if LINUX_VERSION_CODE < KERNEL_VERSION(3,9,0)
326 controlProcEntry = create_proc_entry("driver/vmware-sync",
327 S_IFREG | S_IRUSR | S_IRGRP | S_IROTH,
330 + controlProcEntry = proc_create("driver/vmware-sync",
331 + S_IFREG | S_IRUSR | S_IRGRP | S_IROTH,
335 if (!controlProcEntry) {
336 printk(KERN_ERR "vmsync: could not create /proc/driver/vmware-sync\n");
337 kmem_cache_destroy(gSyncStateCache);
338 @@ -680,7 +685,9 @@ init_module(void)
342 +#if LINUX_VERSION_CODE < KERNEL_VERSION(3,9,0)
343 controlProcEntry->proc_fops = &VmSyncFileOps;