diff --git a/modules/linux/dkms.conf b/modules/linux/dkms.conf index 3ed77f9..263921f 100644 --- a/modules/linux/dkms.conf +++ b/modules/linux/dkms.conf @@ -1,39 +1,39 @@ PACKAGE_NAME=open-vm-tools PACKAGE_VERSION=2013.04.16 MAKE_CMD_TMPL="make VM_UNAME=\$kernelver \ - MODULEBUILDDIR=$dkms_tree/$PACKAGE_NAME/$PACKAGE_VERSION/build" + MODULEBUILDDIR=$dkms_tree/$PACKAGE_NAME/$PACKAGE_VERSION/build \ + CC_WARNINGS=-Wno-unused-local-typedefs" # The vsock module depends on symbols exported by the vmci module, so it # needs to be built afterwards; the MODULEBUILDDIR variable tells the makefiles # where to store / retrive those symbol files. MAKE[0]="$MAKE_CMD_TMPL -C vmblock; \ $MAKE_CMD_TMPL -C vmci; \ $MAKE_CMD_TMPL -C vmhgfs; \ $MAKE_CMD_TMPL -C vmsync; \ $MAKE_CMD_TMPL -C vmxnet; \ $MAKE_CMD_TMPL -C vsock" CLEAN[0]="$MAKE_CMD_TMPL -C vmblock clean; \ $MAKE_CMD_TMPL -C vmci clean; \ $MAKE_CMD_TMPL -C vmhgfs clean; \ - $MAKE_CMD_TMPL -C vmsync clean"; \ + $MAKE_CMD_TMPL -C vmsync clean; \ $MAKE_CMD_TMPL -C vmxnet clean; \ - $MAKE_CMD_TMPL -C vsock clean + $MAKE_CMD_TMPL -C vsock clean" BUILT_MODULE_NAME[0]="vmblock" BUILT_MODULE_NAME[1]="vmci" -BUILT_MODULE_NAME[2]="vmhgfs" -BUILT_MODULE_NAME[3]="vmsync" -BUILT_MODULE_NAME[4]="vmxnet" -BUILT_MODULE_NAME[5]="vsock" +BUILT_MODULE_NAME[1]="vmhgfs" +BUILT_MODULE_NAME[2]="vmsync" +BUILT_MODULE_NAME[3]="vmxnet" +BUILT_MODULE_NAME[4]="vsock" BUILT_MODULE_LOCATION[0]="vmblock/" BUILT_MODULE_LOCATION[1]="vmci/" -BUILT_MODULE_LOCATION[2]="vmhgfs/" -BUILT_MODULE_LOCATION[3]="vmsync/" -BUILT_MODULE_LOCATION[4]="vmxnet/" -BUILT_MODULE_LOCATION[5]="vsock/" +BUILT_MODULE_LOCATION[1]="vmhgfs/" +BUILT_MODULE_LOCATION[2]="vmsync/" +BUILT_MODULE_LOCATION[3]="vmxnet/" +BUILT_MODULE_LOCATION[4]="vsock/" DEST_MODULE_LOCATION[0]="/kernel/fs/vmblock" -DEST_MODULE_LOCATION[1]="/kernel/drivers/misc" -DEST_MODULE_LOCATION[2]="/kernel/fs/vmhgfs" -DEST_MODULE_LOCATION[3]="/kernel/drivers/misc" -DEST_MODULE_LOCATION[4]="/kernel/drivers/net" -DEST_MODULE_LOCATION[5]="/kernel/net/vsock" +DEST_MODULE_LOCATION[1]="/kernel/fs/vmhgfs" +DEST_MODULE_LOCATION[2]="/kernel/drivers/misc" +DEST_MODULE_LOCATION[3]="/kernel/drivers/net" +DEST_MODULE_LOCATION[4]="/kernel/net/vsock" AUTOINSTALL="YES" diff --git a/modules/linux/vmblock/linux/control.c b/modules/linux/vmblock/linux/control.c index 79716bd..ee64cdc 100644 --- a/modules/linux/vmblock/linux/control.c +++ b/modules/linux/vmblock/linux/control.c @@ -28,6 +28,7 @@ #include #include #include +#include #include @@ -208,9 +208,16 @@ SetupProcDevice(void) VMBlockSetProcEntryOwner(controlProcMountpoint); /* Create /proc/fs/vmblock/dev */ +#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0) controlProcEntry = create_proc_entry(VMBLOCK_CONTROL_DEVNAME, VMBLOCK_CONTROL_MODE, controlProcDirEntry); +#else + controlProcEntry = proc_create(VMBLOCK_CONTROL_DEVNAME, + VMBLOCK_CONTROL_MODE, + controlProcDirEntry, + &ControlFileOps); +#endif if (!controlProcEntry) { Warning("SetupProcDevice: could not create " VMBLOCK_DEVICE "\n"); remove_proc_entry(VMBLOCK_CONTROL_MOUNTPOINT, controlProcDirEntry); @@ -218,7 +219,9 @@ SetupProcDevice(void) return -EINVAL; } +#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0) controlProcEntry->proc_fops = &ControlFileOps; +#endif return 0; } @@ -278,7 +278,11 @@ ExecuteBlockOp(const char __user *buf, // IN: buffer with name int (*blockOp)(const char *filename, // IN: block operation const os_blocker_id_t blocker)) { +#if LINUX_VERSION_CODE < KERNEL_VERSION(3,9,0) char *name; +#else + struct filename *name; +#endif int i; int retval; @@ -287,13 +287,26 @@ ExecuteBlockOp(const char __user *buf, // IN: buffer with name return PTR_ERR(name); } +#if LINUX_VERSION_CODE < KERNEL_VERSION(3,9,0) for (i = strlen(name) - 1; i >= 0 && name[i] == '/'; i--) { name[i] = '\0'; +#else + for (i = strlen(name->name) - 1; i >= 0 && name->name[i] == '/'; i--) { + ((char *)name->name)[i] = '\0'; +#endif } +#if LINUX_VERSION_CODE < KERNEL_VERSION(3,9,0) retval = i < 0 ? -EINVAL : blockOp(name, blocker); +#else + retval = i < 0 ? -EINVAL : blockOp(name->name, blocker); +#endif +#if LINUX_VERSION_CODE < KERNEL_VERSION(3,9,0) putname(name); +#else + __putname(name); +#endif return retval; } diff --git a/modules/linux/vmblock/linux/dentry.c b/modules/linux/vmblock/linux/dentry.c index 05ea95a..d93b2f0 100644 --- a/modules/linux/vmblock/linux/dentry.c +++ b/modules/linux/vmblock/linux/dentry.c @@ -26,6 +26,7 @@ #include "driver-config.h" #include +#include #include "compat_namei.h" #include "vmblockInt.h" #include "filesystem.h" @@ -31,7 +31,11 @@ #include "block.h" +#if LINUX_VERSION_CODE < KERNEL_VERSION(3,9,0) static int DentryOpRevalidate(struct dentry *dentry, struct nameidata *nd); +#else +static int DentryOpRevalidate(struct dentry *dentry, unsigned int flags); +#endif struct dentry_operations LinkDentryOps = { .d_revalidate = DentryOpRevalidate, @@ -60,7 +59,11 @@ struct dentry_operations LinkDentryOps = { static int DentryOpRevalidate(struct dentry *dentry, // IN: dentry revalidating +#if LINUX_VERSION_CODE < KERNEL_VERSION(3,9,0) struct nameidata *nd) // IN: lookup flags & intent +#else + unsigned int flags) // IN: lookup flags +#endif { VMBlockInodeInfo *iinfo; struct nameidata actualNd; @@ -101,7 +100,11 @@ DentryOpRevalidate(struct dentry *dentry, // IN: dentry revalidating if (actualDentry && actualDentry->d_op && actualDentry->d_op->d_revalidate) { +#if LINUX_VERSION_CODE < KERNEL_VERSION(3,9,0) return actualDentry->d_op->d_revalidate(actualDentry, nd); +#else + return actualDentry->d_op->d_revalidate(actualDentry, flags); +#endif } if (compat_path_lookup(iinfo->name, 0, &actualNd)) { diff --git a/modules/linux/vmblock/linux/inode.c b/modules/linux/vmblock/linux/inode.c index 098c94c..ddd37f3 100644 --- a/modules/linux/vmblock/linux/inode.c +++ b/modules/linux/vmblock/linux/inode.c @@ -28,6 +28,7 @@ #include #include #include +#include #include "vmblockInt.h" #include "filesystem.h" @@ -36,7 +36,11 @@ /* Inode operations */ static struct dentry *InodeOpLookup(struct inode *dir, +#if LINUX_VERSION_CODE < KERNEL_VERSION(3,9,0) struct dentry *dentry, struct nameidata *nd); +#else + struct dentry *dentry, unsigned int flags); +#endif static int InodeOpReadlink(struct dentry *dentry, char __user *buffer, int buflen); #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 13) static void *InodeOpFollowlink(struct dentry *dentry, struct nameidata *nd); @@ -75,7 +75,11 @@ static struct inode_operations LinkInodeOps = { static struct dentry * InodeOpLookup(struct inode *dir, // IN: parent directory's inode struct dentry *dentry, // IN: dentry to lookup +#if LINUX_VERSION_CODE < KERNEL_VERSION(3,9,0) struct nameidata *nd) // IN: lookup intent and information +#else + unsigned int flags) // IN: lookup flags +#endif { char *filename; struct inode *inode; diff --git a/modules/linux/vmhgfs/file.c b/modules/linux/vmhgfs/file.c index 1033984..db62070 100644 --- a/modules/linux/vmhgfs/file.c +++ b/modules/linux/vmhgfs/file.c @@ -25,9 +25,11 @@ /* Must come before any kernel header file. */ #include "driver-config.h" +#include #include #include #include +#include #include "compat_cred.h" #include "compat_fs.h" #include "compat_kernel.h" diff --git a/modules/linux/vmsync/sync.c b/modules/linux/vmsync/sync.c index d05ccad..73baf8b 100644 --- a/modules/linux/vmsync/sync.c +++ b/modules/linux/vmsync/sync.c @@ -43,6 +43,7 @@ #include #include #include +#include #include "compat_fs.h" #include "compat_module.h" @@ -162,7 +162,11 @@ VmSyncThawDevices(void *_state) // IN cancel_delayed_work(&state->thawTask); list_for_each_safe(cur, tmp, &state->devices) { dev = list_entry(cur, VmSyncBlockDevice, list); +#if LINUX_VERSION_CODE < KERNEL_VERSION(3,9,0) if (dev->sb != NULL && dev->sb->s_frozen != SB_UNFROZEN) { +#else + if (dev->sb != NULL && dev->sb->s_writers.frozen != SB_UNFROZEN) { +#endif thaw_bdev(dev->bdev, dev->sb); atomic_dec(&gFreezeCount); } @@ -237,7 +237,11 @@ VmSyncAddPath(const VmSyncState *state, // IN * the superblock is already frozen. */ if (inode->i_sb->s_bdev == NULL || +#if LINUX_VERSION_CODE < KERNEL_VERSION(3,9,0) inode->i_sb->s_frozen != SB_UNFROZEN) { +#else + inode->i_sb->s_writers.frozen != SB_UNFROZEN) { +#endif result = (inode->i_sb->s_bdev == NULL) ? -EINVAL : -EALREADY; compat_path_release(&nd); goto exit; @@ -303,7 +303,11 @@ VmSyncFreezeDevices(VmSyncState *state, // IN const char __user *userPaths) // IN { int result = 0; +#if LINUX_VERSION_CODE < KERNEL_VERSION(3,9,0) char *paths; +#else + struct filename *paths; +#endif char *currPath; char *nextSep; struct list_head *cur, *tmp; @@ -328,7 +328,12 @@ VmSyncFreezeDevices(VmSyncState *state, // IN /* * First, try to add all paths to the list of paths to be frozen. */ +#if LINUX_VERSION_CODE < KERNEL_VERSION(3,9,0) currPath = paths; +#else + currPath = __getname(); + strcpy(currPath, paths->name); +#endif do { nextSep = strchr(currPath, ':'); if (nextSep != NULL) { @@ -347,6 +348,9 @@ VmSyncFreezeDevices(VmSyncState *state, // IN } currPath = nextSep + 1; } while (nextSep != NULL); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,9,0) + __putname(currPath); +#endif /* * If adding all the requested paths worked, then freeze them. @@ -371,6 +373,10 @@ VmSyncFreezeDevices(VmSyncState *state, // IN compat_mutex_unlock(&state->lock); compat_mutex_unlock(&gFreezeLock); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,9,0) + __putname(paths); +#endif + if (result == 0) { compat_schedule_delayed_work(&state->thawTask, VMSYNC_THAW_TASK_DELAY); } @@ -670,9 +674,16 @@ init_module(void) } /* Create /proc/driver/vmware-sync */ +#if LINUX_VERSION_CODE < KERNEL_VERSION(3,9,0) controlProcEntry = create_proc_entry("driver/vmware-sync", S_IFREG | S_IRUSR | S_IRGRP | S_IROTH, NULL); +#else + controlProcEntry = proc_create("driver/vmware-sync", + S_IFREG | S_IRUSR | S_IRGRP | S_IROTH, + NULL, + &VmSyncFileOps); +#endif if (!controlProcEntry) { printk(KERN_ERR "vmsync: could not create /proc/driver/vmware-sync\n"); kmem_cache_destroy(gSyncStateCache); @@ -680,7 +685,9 @@ init_module(void) return -EINVAL; } +#if LINUX_VERSION_CODE < KERNEL_VERSION(3,9,0) controlProcEntry->proc_fops = &VmSyncFileOps; +#endif return 0; }