Patched sourses: http://filebin.ca/2BMXIZgMZuZ0/source.tar.xz
Patch in attach
diff -ur a/vmblock-only/linux/control.c b/vmblock-only/linux/control.c
--- a/vmblock-only/linux/control.c 2015-05-31 16:01:25.000000000 +0300
+++ b/vmblock-only/linux/control.c 2015-08-08 00:23:51.000000000 +0300
@@ -208,9 +208,11 @@
VMBlockSetProcEntryOwner(controlProcMountpoint);
/* Create /proc/fs/vmblock/dev */
- controlProcEntry = create_proc_entry(VMBLOCK_CONTROL_DEVNAME,
- VMBLOCK_CONTROL_MODE,
- controlProcDirEntry);
+ controlProcEntry = proc_create(VMBLOCK_CONTROL_DEVNAME,
+ VMBLOCK_CONTROL_MODE,
+ controlProcDirEntry,
+ &ControlFileOps);
+
if (!controlProcEntry) {
Warning("SetupProcDevice: could not create " VMBLOCK_DEVICE "\n");
remove_proc_entry(VMBLOCK_CONTROL_MOUNTPOINT, controlProcDirEntry);
@@ -218,7 +220,10 @@
return -EINVAL;
}
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 13, 0)
controlProcEntry->proc_fops = &ControlFileOps;
+#endif
+
return 0;
}
@@ -272,17 +277,44 @@
*----------------------------------------------------------------------------
*/
+/* copy-paste from Lustre FS by pavlinux */
+static char *ll_getname(const char __user *filename)
+{
+ int ret = 0, len;
+ char *tmp = __getname();
+
+ if (!tmp)
+ return ERR_PTR(-ENOMEM);
+
+ len = strncpy_from_user(tmp, filename, PATH_MAX);
+ if (len == 0)
+ ret = -ENOENT;
+ else if (len > PATH_MAX)
+ ret = -ENAMETOOLONG;
+
+ if (ret) {
+ __putname(tmp);
+ tmp = ERR_PTR(ret);
+ }
+ return tmp;
+}
+
static int
ExecuteBlockOp(const char __user *buf, // IN: buffer with name
const os_blocker_id_t blocker, // IN: blocker ID (file)
int (*blockOp)(const char *filename, // IN: block operation
const os_blocker_id_t blocker))
{
- char *name;
+ struct filename *fn = NULL;
+ char *name = (char *)fn->name;
int i;
int retval;
- name = getname(buf);
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 13, 0)
+ name = (char *)getname(buf);
+#else
+ name = (char *)ll_getname(buf);
+#endif
if (IS_ERR(name)) {
return PTR_ERR(name);
}
@@ -293,7 +325,12 @@
retval = i < 0 ? -EINVAL : blockOp(name, blocker);
- putname(name);
+ if (fn->name != fn->iname) { /* add by pavlinux */
+ __putname(fn->name);
+ kvfree(fn);
+ } else {
+ __putname(fn);
+ }
return retval;
}
diff -ur a/vmblock-only/linux/dentry.c b/vmblock-only/linux/dentry.c
--- a/vmblock-only/linux/dentry.c 2015-05-31 16:01:25.000000000 +0300
+++ b/vmblock-only/linux/dentry.c 2015-02-24 03:58:06.000000000 +0300
@@ -32,7 +32,11 @@
#include "block.h"
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 13, 0)
static int DentryOpRevalidate(struct dentry *dentry, struct nameidata *nd);
+#else
+static int DentryOpRevalidate(struct dentry *dentry, unsigned int);
+#endif
struct dentry_operations LinkDentryOps = {
.d_revalidate = DentryOpRevalidate,
@@ -58,9 +62,12 @@
*----------------------------------------------------------------------------
*/
-static int
-DentryOpRevalidate(struct dentry *dentry, // IN: dentry revalidating
- struct nameidata *nd) // IN: lookup flags & intent
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 14, 0)
+static int DentryOpRevalidate(struct dentry *dentry, struct nameidata *nd)
+#else
+static int DentryOpRevalidate(struct dentry *dentry, unsigned int flags)
+#endif
+
{
VMBlockInodeInfo *iinfo;
struct nameidata actualNd;
@@ -101,7 +108,11 @@
if (actualDentry &&
actualDentry->d_op &&
actualDentry->d_op->d_revalidate) {
+#if LINUX_VERSION_CODE > KERNEL_VERSION(3, 14, 0)
+ return actualDentry->d_op->d_revalidate(actualDentry, flags);
+#else
return actualDentry->d_op->d_revalidate(actualDentry, nd);
+#endif
}
if (compat_path_lookup(iinfo->name, 0, &actualNd)) {
diff -ur a/vmblock-only/linux/file.c b/vmblock-only/linux/file.c
--- a/vmblock-only/linux/file.c 2015-05-31 16:01:25.000000000 +0300
+++ b/vmblock-only/linux/file.c 2015-02-24 03:58:06.000000000 +0300
@@ -38,6 +38,7 @@
typedef ino_t inode_num_t;
#endif
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 13, 0)
/* Specifically for our filldir_t callback */
typedef struct FilldirInfo {
filldir_t filldir;
@@ -76,7 +77,7 @@
/* Specify DT_LNK regardless */
return info->filldir(info->dirent, name, namelen, offset, ino, DT_LNK);
}
-
+#endif
/* File operations */
@@ -132,7 +133,7 @@
* and that would try to acquire the inode's semaphore; if the two inodes
* are the same we'll deadlock.
*/
- if (actualFile->f_dentry && inode == actualFile->f_dentry->d_inode) {
+ if (actualFile->f_path.dentry && inode == actualFile->f_path.dentry->d_inode) {
Warning("FileOpOpen: identical inode encountered, open cannot succeed.\n");
if (filp_close(actualFile, current->files) < 0) {
Warning("FileOpOpen: unable to close opened file.\n");
@@ -164,6 +165,7 @@
*----------------------------------------------------------------------------
*/
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 13, 0)
static int
FileOpReaddir(struct file *file, // IN
void *dirent, // IN
@@ -193,7 +195,7 @@
return ret;
}
-
+#endif
/*
*----------------------------------------------------------------------------
@@ -237,7 +239,11 @@
struct file_operations RootFileOps = {
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 13, 0)
.readdir = FileOpReaddir,
+#endif
+ .owner = THIS_MODULE,
+ .llseek = no_llseek,
.open = FileOpOpen,
.release = FileOpRelease,
};
diff -ur a/vmblock-only/linux/filesystem.c b/vmblock-only/linux/filesystem.c
--- a/vmblock-only/linux/filesystem.c 2015-05-31 16:01:25.000000000 +0300
+++ b/vmblock-only/linux/filesystem.c 2015-02-24 03:58:06.000000000 +0300
@@ -322,6 +322,7 @@
{
VMBlockInodeInfo *iinfo;
struct inode *inode;
+
struct nameidata actualNd;
ASSERT(sb);
diff -ur a/vmblock-only/linux/inode.c b/vmblock-only/linux/inode.c
--- a/vmblock-only/linux/inode.c 2015-05-31 16:01:25.000000000 +0300
+++ b/vmblock-only/linux/inode.c 2015-08-08 00:33:22.000000000 +0300
@@ -35,26 +35,27 @@
/* Inode operations */
-static struct dentry *InodeOpLookup(struct inode *dir,
- struct dentry *dentry, struct nameidata *nd);
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 13, 0)
+static struct dentry *InodeOpLookup(struct inode *dir, struct dentry *dentry, struct nameidata *nd);
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);
#else
-static int InodeOpFollowlink(struct dentry *dentry, struct nameidata *nd);
+static struct dentry *InodeOpLookup(struct inode *, struct dentry *, unsigned int);
+static int InodeOpReadlink(struct dentry *, char __user *, int);
#endif
+static const char *InodeOpFollowlink(struct dentry *dentry, void **cookie);
+
struct inode_operations RootInodeOps = {
.lookup = InodeOpLookup,
};
-static struct inode_operations LinkInodeOps = {
+struct inode_operations LinkInodeOps = {
.readlink = InodeOpReadlink,
.follow_link = InodeOpFollowlink,
};
-
/*
*----------------------------------------------------------------------------
*
@@ -75,7 +76,11 @@
static struct dentry *
InodeOpLookup(struct inode *dir, // IN: parent directory's inode
struct dentry *dentry, // IN: dentry to lookup
- struct nameidata *nd) // IN: lookup intent and information
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 13, 0)
+ struct nameidata *nd) // IN: lookup intent and information
+#else
+ unsigned int flags)
+#endif
{
char *filename;
struct inode *inode;
@@ -135,7 +140,12 @@
inode->i_size = INODE_TO_IINFO(inode)->nameLen;
inode->i_version = 1;
inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME;
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 13, 0)
inode->i_uid = inode->i_gid = 0;
+#else
+ inode->i_gid = make_kgid(current_user_ns(), 0);
+ inode->i_uid = make_kuid(current_user_ns(), 0);
+#endif
inode->i_op = &LinkInodeOps;
d_add(dentry, inode);
@@ -177,7 +187,12 @@
return -EINVAL;
}
- return vfs_readlink(dentry, buffer, buflen, iinfo->name);
+#if LINUX_VERSION_CODE <= KERNEL_VERSION(3, 14, 99)
+ return vfs_readlink(dentry, buffer, buflen, iinfo->name);
+#else
+ return readlink_copy(buffer, buflen, iinfo->name);
+#endif
+
}
@@ -198,13 +213,7 @@
*----------------------------------------------------------------------------
*/
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 13)
-static void *
-#else
-static int
-#endif
-InodeOpFollowlink(struct dentry *dentry, // IN : dentry of symlink
- struct nameidata *nd) // OUT: stores result
+static const char *InodeOpFollowlink(struct dentry *dentry, void **cookie)
{
int ret;
VMBlockInodeInfo *iinfo;
@@ -221,7 +230,11 @@
goto out;
}
- ret = vfs_follow_link(nd, iinfo->name);
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 2, 0)
+ return *cookie = (char *)(iinfo->name);
+#else
+ nd_set_link(nd, iinfo->name);
+#endif
out:
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 13)
@@ -230,3 +243,4 @@
return ret;
#endif
}
+
Только в a/vmblock-only/shared/autoconf: dalias.c
Только в a/vmblock-only/shared/autoconf: truncate_pagecache.c
diff -ur a/vmblock-only/shared/compat_namei.h b/vmblock-only/shared/compat_namei.h
--- a/vmblock-only/shared/compat_namei.h 2015-05-31 16:01:25.000000000 +0300
+++ b/vmblock-only/shared/compat_namei.h 2015-02-24 03:51:25.000000000 +0300
@@ -21,6 +21,20 @@
#include <linux/namei.h>
+/* Copy-n-paste from kernel's source/fs/namei.c */
+struct nameidata {
+ struct path path;
+ struct qstr last;
+ struct path root;
+ struct inode *inode; /* path.dentry.d_inode */
+ unsigned int flags;
+ unsigned seq, m_seq;
+ int last_type;
+ unsigned depth;
+ struct file *base;
+ char *saved_names[MAX_NESTED_LINKS + 1];
+};
+
/*
* In 2.6.25-rc2, dentry and mount objects were removed from the nameidata
* struct. They were both replaced with a struct path.
diff -ur a/vmci-only/linux/driver.c b/vmci-only/linux/driver.c
--- a/vmci-only/linux/driver.c 2015-05-31 16:01:25.000000000 +0300
+++ b/vmci-only/linux/driver.c 2015-08-08 00:42:47.000000000 +0300
@@ -26,13 +26,16 @@
#include <linux/file.h>
#include <linux/fs.h>
+#include <linux/vmalloc.h>
#include <linux/init.h>
+
#if defined(__x86_64__) && LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 12)
# include <linux/ioctl32.h>
/* Use weak: not all kernels export sys_ioctl for use by modules */
asmlinkage __attribute__((weak)) long
sys_ioctl(unsigned int fd, unsigned int cmd, unsigned long arg);
#endif
+
#include <linux/miscdevice.h>
#include <linux/moduleparam.h>
#include <linux/poll.h>
@@ -713,7 +716,7 @@
case IOCTL_VMCI_INIT_CONTEXT: {
VMCIInitBlock initBlock;
- VMCIHostUser user;
+ uid_t user;
retval = copy_from_user(&initBlock, (void *)ioarg, sizeof initBlock);
if (retval != 0) {
@@ -735,7 +738,11 @@
goto init_release;
}
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 13, 0)
user = current_uid();
+#else
+ user = from_kuid(&init_user_ns, current_uid());
+#endif
retval = VMCIContext_InitContext(initBlock.cid, initBlock.flags,
0 /* Unused */, vmciLinux->userVersion,
&user, &vmciLinux->context);
@@ -1683,7 +1690,7 @@
/* This should be last to make sure we are done initializing. */
retval = pci_register_driver(&vmci_driver);
if (retval < 0) {
- vfree(data_buffer);
+ kvfree(data_buffer);
data_buffer = NULL;
return retval;
}
@@ -2470,7 +2477,7 @@
if (guestDeviceInit) {
pci_unregister_driver(&vmci_driver);
- vfree(data_buffer);
+ kvfree(data_buffer);
guestDeviceInit = FALSE;
}
diff -ur a/vmci-only/linux/vmciKernelIf.c b/vmci-only/linux/vmciKernelIf.c
--- a/vmci-only/linux/vmciKernelIf.c 2015-05-31 16:01:25.000000000 +0300
+++ b/vmci-only/linux/vmciKernelIf.c 2015-02-24 03:58:06.000000000 +0300
@@ -40,6 +40,7 @@
#include <linux/socket.h> /* For memcpy_{to,from}iovec(). */
#include <linux/vmalloc.h>
#include <linux/wait.h>
+#include <linux/skbuff.h>
#include "compat_highmem.h"
#include "compat_interrupt.h"
@@ -1196,21 +1197,21 @@
} else {
toCopy = size - bytesCopied;
}
-
+ /* Code cloned from kernels drivers/misc/vmw_vmci/vmci_queue_pair.c */
if (isIovec) {
- struct iovec *iov = (struct iovec *)src;
- int err;
+ struct msghdr *msg = (struct msghdr *)src;
+ int err;
- /* The iovec will track bytesCopied internally. */
- err = memcpy_fromiovec((uint8 *)va + pageOffset, iov, toCopy);
- if (err != 0) {
- if (kernelIf->host) {
- kunmap(kernelIf->u.h.page[pageIndex]);
+ /* The iovec will track bytes_copied internally. */
+ err = memcpy_from_msg((u8 *)va + pageOffset, msg, toCopy);
+ if (err != 0) {
+ if (kernelIf->host)
+ kunmap(kernelIf->u.h.page[pageIndex]);
+ return VMCI_ERROR_INVALID_ARGS;
}
- return VMCI_ERROR_INVALID_ARGS;
- }
- } else {
- memcpy((uint8 *)va + pageOffset, (uint8 *)src + bytesCopied, toCopy);
+ } else {
+ memcpy((u8 *)va + pageOffset,
+ (u8 *)src + bytesCopied, toCopy);
}
bytesCopied += toCopy;
@@ -1273,11 +1274,11 @@
}
if (isIovec) {
- struct iovec *iov = (struct iovec *)dest;
+ struct msghdr *msg = (struct msghdr *)dest;
int err;
/* The iovec will track bytesCopied internally. */
- err = memcpy_toiovec(iov, (uint8 *)va + pageOffset, toCopy);
+ err = memcpy_to_msg(msg, (uint8 *)va + pageOffset, toCopy);
if (err != 0) {
if (kernelIf->host) {
kunmap(kernelIf->u.h.page[pageIndex]);
diff -ur a/vmci-only/shared/vmci_kernel_if.h b/vmci-only/shared/vmci_kernel_if.h
--- a/vmci-only/shared/vmci_kernel_if.h 2015-05-31 16:01:26.000000000 +0300
+++ b/vmci-only/shared/vmci_kernel_if.h 2015-02-24 03:58:06.000000000 +0300
@@ -93,7 +93,7 @@
typedef Semaphore VMCIEvent;
typedef Semaphore VMCIMutex;
typedef World_ID VMCIHostVmID;
- typedef uint32 VMCIHostUser;
+ typedef uint32_t VMCIHostUser;
typedef PPN *VMCIQPGuestMem;
#elif defined(linux)
typedef spinlock_t VMCILock;
@@ -117,7 +117,7 @@
} VMCIEvent;
typedef IOLock *VMCIMutex;
typedef void *VMCIPpnList; /* Actually a pointer to the C++ Object IOMemoryDescriptor */
- typedef uid_t VMCIHostUser;
+ typedef kuid_t VMCIHostUser;
typedef VA64 *VMCIQPGuestMem;
#elif defined(_WIN32)
typedef KSPIN_LOCK VMCILock;
diff -ur a/vmci-only/shared/vm_device_version.h b/vmci-only/shared/vm_device_version.h
--- a/vmci-only/shared/vm_device_version.h 2015-05-31 16:01:26.000000000 +0300
+++ b/vmci-only/shared/vm_device_version.h 2015-02-24 03:58:06.000000000 +0300
@@ -53,7 +53,9 @@
* VMware HD Audio codec
* VMware HD Audio controller
*/
+#ifndef PCI_VENDOR_ID_VMWARE
#define PCI_VENDOR_ID_VMWARE 0x15AD
+#endif
#define PCI_DEVICE_ID_VMWARE_SVGA2 0x0405
#define PCI_DEVICE_ID_VMWARE_SVGA 0x0710
#define PCI_DEVICE_ID_VMWARE_VGA 0x0711
diff -ur a/vmmon-only/linux/driver.c b/vmmon-only/linux/driver.c
--- a/vmmon-only/linux/driver.c 2015-05-31 16:40:39.000000000 +0300
+++ b/vmmon-only/linux/driver.c 2015-08-07 05:30:27.000000000 +0300
@@ -1328,7 +1328,7 @@
*-----------------------------------------------------------------------------
*/
-__attribute__((always_inline)) static Bool
+inline static Bool
LinuxDriverSyncReadTSCs(uint64 *delta) // OUT: TSC max - TSC min
{
TSCDelta tscDelta;
diff -ur a/vmmon-only/linux/vmmonInt.h b/vmmon-only/linux/vmmonInt.h
--- a/vmmon-only/linux/vmmonInt.h 2015-05-31 16:40:39.000000000 +0300
+++ b/vmmon-only/linux/vmmonInt.h 2015-08-07 05:29:20.000000000 +0300
@@ -31,7 +31,7 @@
#ifdef VMW_HAVE_SMP_CALL_3ARG
#define compat_smp_call_function(fn, info, wait) smp_call_function(fn, info, wait)
#else
-#define compat_smp_call_function(fn, info, wait) smp_call_function(fn, info, 1, wait)
+#define compat_smp_call_function(fn, info, wait) smp_call_function(fn, info, wait)
#endif
/*
diff -ur a/vmnet-only/vm_device_version.h b/vmnet-only/vm_device_version.h
--- a/vmnet-only/vm_device_version.h 2015-05-31 16:40:39.000000000 +0300
+++ b/vmnet-only/vm_device_version.h 2015-08-07 05:21:33.000000000 +0300
@@ -53,7 +53,10 @@
* VMware HD Audio codec
* VMware HD Audio controller
*/
-#define PCI_VENDOR_ID_VMWARE 0x15AD
+#ifdef PCI_VENDOR_ID_VMWARE
+ #undef PCI_VENDOR_ID_VMWARE
+ #define PCI_VENDOR_ID_VMWARE 0x15AD
+#endif
#define PCI_DEVICE_ID_VMWARE_SVGA2 0x0405
#define PCI_DEVICE_ID_VMWARE_SVGA 0x0710
#define PCI_DEVICE_ID_VMWARE_VGA 0x0711
diff -ur a/vmnet-only/vmnetInt.h b/vmnet-only/vmnetInt.h
--- a/vmnet-only/vmnetInt.h 2015-05-31 16:40:39.000000000 +0300
+++ b/vmnet-only/vmnetInt.h 2015-08-07 05:19:49.000000000 +0300
@@ -77,13 +77,18 @@
extern struct proto vmnet_proto;
+
#ifdef VMW_NETDEV_HAS_NET
-# define compat_sk_alloc(_bri, _pri) sk_alloc(&init_net, \
- PF_NETLINK, _pri, &vmnet_proto)
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 2, 0)
+# define compat_sk_alloc(_bri, _pri) sk_alloc(&init_net, \
+ PF_NETLINK, _pri, &vmnet_proto, 1)
#else
-# define compat_sk_alloc(_bri, _pri) sk_alloc(PF_NETLINK, _pri, &vmnet_proto, 1)
+# define compat_sk_alloc(_bri, _pri) sk_alloc(&init_net, \
+ PF_NETLINK, _pri, &vmnet_proto)
+#endif
+#else
+# define compat_sk_alloc(_bri, _pri) sk_alloc(PF_NETLINK, _pri, &vmnet_proto, 1)
#endif
-
#ifdef NF_IP_LOCAL_IN
#define VMW_NF_INET_LOCAL_IN NF_IP_LOCAL_IN
diff -ur a/vsock-only/linux/af_vsock.c b/vsock-only/linux/af_vsock.c
--- a/vsock-only/linux/af_vsock.c 2015-05-31 16:01:26.000000000 +0300
+++ b/vsock-only/linux/af_vsock.c 2015-08-07 05:26:39.000000000 +0300
@@ -2826,7 +2826,9 @@
* network namespace, and the option to zero the sock was dropped.
*
*/
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 12)
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 2, 0)
+ sk = sk_alloc(net, vsockVmciFamilyOps.family, priority, &vsockVmciProto, 1);
+#elif LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 12)
sk = sk_alloc(vsockVmciFamilyOps.family, priority,
vsockVmciProto.slab_obj_size, vsockVmciProto.slab);
#elif LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 24)
@@ -4302,7 +4304,7 @@
goto out;
}
- memcpy_fromiovec(VMCI_DG_PAYLOAD(dg), msg->msg_iov, len);
+ memcpy_from_msg(VMCI_DG_PAYLOAD(dg), msg, len);
dg->dst = VMCI_MAKE_HANDLE(remoteAddr->svm_cid, remoteAddr->svm_port);
dg->src = VMCI_MAKE_HANDLE(vsk->localAddr.svm_cid, vsk->localAddr.svm_port);
@@ -4662,7 +4664,7 @@
* able to send.
*/
- written = vmci_qpair_enquev(vsk->qpair, msg->msg_iov,
+ written = vmci_qpair_enquev(vsk->qpair, &msg->msg_iter.iov,
len - totalWritten, 0);
if (written < 0) {
err = -ENOMEM;
@@ -4721,6 +4723,7 @@
VMCIDatagram *dg;
size_t payloadLen;
struct sk_buff *skb;
+ struct iov_iter to;
sk = sock->sk;
noblock = flags & MSG_DONTWAIT;
@@ -4759,7 +4762,9 @@
}
/* Place the datagram payload in the user's iovec. */
- err = skb_copy_datagram_iovec(skb, sizeof *dg, msg->msg_iov, payloadLen);
+ // err = skb_copy_datagram_iovec(skb, sizeof *dg, msg->msg_iter, payloadLen);
+ iov_iter_init(&to, READ, (struct iovec *)&msg->msg_iter.iov, 1, payloadLen);
+ err = skb_copy_datagram_iter(skb, 0, &to, payloadLen);
if (err) {
goto out;
}
@@ -4905,9 +4910,9 @@
}
if (flags & MSG_PEEK) {
- read = vmci_qpair_peekv(vsk->qpair, msg->msg_iov, len - copied, 0);
+ read = vmci_qpair_peekv(vsk->qpair, &msg->msg_iter.iov, len - copied, 0);
} else {
- read = vmci_qpair_dequev(vsk->qpair, msg->msg_iov, len - copied, 0);
+ read = vmci_qpair_dequev(vsk->qpair, &msg->msg_iter.iov, len - copied, 0);
}
if (read < 0) {
diff -ur a/vsock-only/linux/notify.c b/vsock-only/linux/notify.c
--- a/vsock-only/linux/notify.c 2015-05-31 16:01:26.000000000 +0300
+++ b/vsock-only/linux/notify.c 2015-02-24 01:09:40.000000000 +0300
@@ -516,7 +516,7 @@
PKT_FIELD(vsk, sentWaitingRead) = FALSE;
#endif
- sk->sk_data_ready(sk, 0);
+ sk->sk_data_ready(sk);
}
diff -ur a/vsock-only/linux/notifyQState.c b/vsock-only/linux/notifyQState.c
--- a/vsock-only/linux/notifyQState.c 2015-05-31 16:01:26.000000000 +0300
+++ b/vsock-only/linux/notifyQState.c 2015-02-24 01:09:40.000000000 +0300
@@ -164,7 +164,7 @@
struct sockaddr_vm *dst, // IN: unused
struct sockaddr_vm *src) // IN: unused
{
- sk->sk_data_ready(sk, 0);
+ sk->sk_data_ready(sk);
}
@@ -566,7 +566,7 @@
}
/* See the comment in VSockVmciNotifyPktSendPostEnqueue */
- sk->sk_data_ready(sk, 0);
+ sk->sk_data_ready(sk);
}
return err;
diff -ur a/vsock-only/Makefile b/vsock-only/Makefile
--- a/vsock-only/Makefile 2015-05-31 16:01:25.000000000 +0300
+++ b/vsock-only/Makefile 2015-02-24 01:09:40.000000000 +0300
@@ -131,7 +131,7 @@
> /dev/null 2>&1; then echo "$(2)"; else echo "$(3)"; fi)
CC_WARNINGS := -Wall -Wstrict-prototypes
-CC_OPTS := $(GLOBAL_DEFS) $(CC_WARNINGS) -DVMW_USING_KBUILD
+CC_OPTS := $(GLOBAL_DEFS) $(CC_WARNINGS) -DVMW_USING_KBUILD -g0
ifdef VMX86_DEVEL
CC_OPTS += -DVMX86_DEVEL
endif
diff -ur a/vsock-only/shared/vmci_kernel_if.h b/vsock-only/shared/vmci_kernel_if.h
--- a/vsock-only/shared/vmci_kernel_if.h 2015-05-31 16:01:26.000000000 +0300
+++ b/vsock-only/shared/vmci_kernel_if.h 2015-02-24 02:51:12.000000000 +0300
@@ -102,7 +102,7 @@
typedef struct semaphore VMCIMutex;
typedef PPN *VMCIPpnList; /* List of PPNs in produce/consume queue. */
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 5, 0)
- typedef kuid_t VMCIHostUser;
+ typedef uid_t VMCIHostUser;
#else
typedef uid_t VMCIHostUser;
#endif
Now tested!
This is awesome, thank you. Works perfectly on:
4.2-3.dmz.1-liquorix-amd64 #1 ZEN SMP PREEMPT Debian 4.2-6 (2015-10-03) x86_64 GNU/Linux
How to use this patch? plz help me.. thanks before