aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/vhost
diff options
context:
space:
mode:
authorAl Viro <viro@zeniv.linux.org.uk>2014-11-24 10:42:55 -0500
committerAl Viro <viro@zeniv.linux.org.uk>2014-12-09 16:29:03 -0500
commitc0371da6047abd261bc483c744dbc7d81a116172 (patch)
tree73b4d685f311a83e04f3a684ce18225b409b3f5f /drivers/vhost
parentd838df2e5dcbb6ed4d82854869e9a30f9aeef6da (diff)
put iov_iter into msghdr
Note that the code _using_ ->msg_iter at that point will be very unhappy with anything other than unshifted iovec-backed iov_iter. We still need to convert users to proper primitives. Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'drivers/vhost')
-rw-r--r--drivers/vhost/net.c8
1 files changed, 3 insertions, 5 deletions
diff --git a/drivers/vhost/net.c b/drivers/vhost/net.c
index 8dae2f724a35..9f06e70a2631 100644
--- a/drivers/vhost/net.c
+++ b/drivers/vhost/net.c
@@ -342,7 +342,6 @@ static void handle_tx(struct vhost_net *net)
342 .msg_namelen = 0, 342 .msg_namelen = 0,
343 .msg_control = NULL, 343 .msg_control = NULL,
344 .msg_controllen = 0, 344 .msg_controllen = 0,
345 .msg_iov = vq->iov,
346 .msg_flags = MSG_DONTWAIT, 345 .msg_flags = MSG_DONTWAIT,
347 }; 346 };
348 size_t len, total_len = 0; 347 size_t len, total_len = 0;
@@ -396,8 +395,8 @@ static void handle_tx(struct vhost_net *net)
396 } 395 }
397 /* Skip header. TODO: support TSO. */ 396 /* Skip header. TODO: support TSO. */
398 s = move_iovec_hdr(vq->iov, nvq->hdr, hdr_size, out); 397 s = move_iovec_hdr(vq->iov, nvq->hdr, hdr_size, out);
399 msg.msg_iovlen = out;
400 len = iov_length(vq->iov, out); 398 len = iov_length(vq->iov, out);
399 iov_iter_init(&msg.msg_iter, WRITE, vq->iov, out, len);
401 /* Sanity check */ 400 /* Sanity check */
402 if (!len) { 401 if (!len) {
403 vq_err(vq, "Unexpected header len for TX: " 402 vq_err(vq, "Unexpected header len for TX: "
@@ -562,7 +561,6 @@ static void handle_rx(struct vhost_net *net)
562 .msg_namelen = 0, 561 .msg_namelen = 0,
563 .msg_control = NULL, /* FIXME: get and handle RX aux data. */ 562 .msg_control = NULL, /* FIXME: get and handle RX aux data. */
564 .msg_controllen = 0, 563 .msg_controllen = 0,
565 .msg_iov = vq->iov,
566 .msg_flags = MSG_DONTWAIT, 564 .msg_flags = MSG_DONTWAIT,
567 }; 565 };
568 struct virtio_net_hdr_mrg_rxbuf hdr = { 566 struct virtio_net_hdr_mrg_rxbuf hdr = {
@@ -600,7 +598,7 @@ static void handle_rx(struct vhost_net *net)
600 break; 598 break;
601 /* On overrun, truncate and discard */ 599 /* On overrun, truncate and discard */
602 if (unlikely(headcount > UIO_MAXIOV)) { 600 if (unlikely(headcount > UIO_MAXIOV)) {
603 msg.msg_iovlen = 1; 601 iov_iter_init(&msg.msg_iter, READ, vq->iov, 1, 1);
604 err = sock->ops->recvmsg(NULL, sock, &msg, 602 err = sock->ops->recvmsg(NULL, sock, &msg,
605 1, MSG_DONTWAIT | MSG_TRUNC); 603 1, MSG_DONTWAIT | MSG_TRUNC);
606 pr_debug("Discarded rx packet: len %zd\n", sock_len); 604 pr_debug("Discarded rx packet: len %zd\n", sock_len);
@@ -626,7 +624,7 @@ static void handle_rx(struct vhost_net *net)
626 /* Copy the header for use in VIRTIO_NET_F_MRG_RXBUF: 624 /* Copy the header for use in VIRTIO_NET_F_MRG_RXBUF:
627 * needed because recvmsg can modify msg_iov. */ 625 * needed because recvmsg can modify msg_iov. */
628 copy_iovec_hdr(vq->iov, nvq->hdr, sock_hlen, in); 626 copy_iovec_hdr(vq->iov, nvq->hdr, sock_hlen, in);
629 msg.msg_iovlen = in; 627 iov_iter_init(&msg.msg_iter, READ, vq->iov, in, sock_len);
630 err = sock->ops->recvmsg(NULL, sock, &msg, 628 err = sock->ops->recvmsg(NULL, sock, &msg,
631 sock_len, MSG_DONTWAIT | MSG_TRUNC); 629 sock_len, MSG_DONTWAIT | MSG_TRUNC);
632 /* Userspace might have consumed the packet meanwhile: 630 /* Userspace might have consumed the packet meanwhile: