]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/blobdiff - net/9p/protocol.c
Merge tag 'for-linus-4.1-merge-window' of git://git.kernel.org/pub/scm/linux/kernel...
[mirror_ubuntu-artful-kernel.git] / net / 9p / protocol.c
index 305e4789f2ccd98b60dcc67248ee573cbbdd2d44..16d28756598789504f9a30a07476256a2146b2e3 100644 (file)
@@ -33,6 +33,7 @@
 #include <linux/sched.h>
 #include <linux/stddef.h>
 #include <linux/types.h>
+#include <linux/uio.h>
 #include <net/9p/9p.h>
 #include <net/9p/client.h>
 #include "protocol.h"
@@ -69,10 +70,11 @@ static size_t pdu_write(struct p9_fcall *pdu, const void *data, size_t size)
 }
 
 static size_t
-pdu_write_u(struct p9_fcall *pdu, const char __user *udata, size_t size)
+pdu_write_u(struct p9_fcall *pdu, struct iov_iter *from, size_t size)
 {
        size_t len = min(pdu->capacity - pdu->size, size);
-       if (copy_from_user(&pdu->sdata[pdu->size], udata, len))
+       struct iov_iter i = *from;
+       if (copy_from_iter(&pdu->sdata[pdu->size], len, &i) != len)
                len = 0;
 
        pdu->size += len;
@@ -437,23 +439,13 @@ p9pdu_vwritef(struct p9_fcall *pdu, int proto_version, const char *fmt,
                                                 stbuf->extension, stbuf->n_uid,
                                                 stbuf->n_gid, stbuf->n_muid);
                        } break;
-               case 'D':{
-                               uint32_t count = va_arg(ap, uint32_t);
-                               const void *data = va_arg(ap, const void *);
-
-                               errcode = p9pdu_writef(pdu, proto_version, "d",
-                                                                       count);
-                               if (!errcode && pdu_write(pdu, data, count))
-                                       errcode = -EFAULT;
-                       }
-                       break;
-               case 'U':{
+               case 'V':{
                                uint32_t count = va_arg(ap, uint32_t);
-                               const char __user *udata =
-                                               va_arg(ap, const void __user *);
+                               struct iov_iter *from =
+                                               va_arg(ap, struct iov_iter *);
                                errcode = p9pdu_writef(pdu, proto_version, "d",
                                                                        count);
-                               if (!errcode && pdu_write_u(pdu, udata, count))
+                               if (!errcode && pdu_write_u(pdu, from, count))
                                        errcode = -EFAULT;
                        }
                        break;