vhost: switch vhost get_indirect() to iov_iter, kill memcpy_fromiovec()
[cascardo/linux.git] / drivers / vhost / vhost.c
index cb807d0..2ee2826 100644 (file)
@@ -1125,6 +1125,7 @@ static int get_indirect(struct vhost_virtqueue *vq,
        struct vring_desc desc;
        unsigned int i = 0, count, found = 0;
        u32 len = vhost32_to_cpu(vq, indirect->len);
+       struct iov_iter from;
        int ret;
 
        /* Sanity check */
@@ -1142,6 +1143,7 @@ static int get_indirect(struct vhost_virtqueue *vq,
                vq_err(vq, "Translation failure %d in indirect.\n", ret);
                return ret;
        }
+       iov_iter_init(&from, READ, vq->indirect, ret, len);
 
        /* We will use the result as an address to read from, so most
         * architectures only need a compiler barrier here. */
@@ -1164,8 +1166,8 @@ static int get_indirect(struct vhost_virtqueue *vq,
                               i, count);
                        return -EINVAL;
                }
-               if (unlikely(memcpy_fromiovec((unsigned char *)&desc,
-                                             vq->indirect, sizeof desc))) {
+               if (unlikely(copy_from_iter(&desc, sizeof(desc), &from) !=
+                            sizeof(desc))) {
                        vq_err(vq, "Failed indirect descriptor: idx %d, %zx\n",
                               i, (size_t)vhost64_to_cpu(vq, indirect->addr) + i * sizeof desc);
                        return -EINVAL;