Commit 98a527aa authored by Al Viro's avatar Al Viro

vhost: don't bother with copying iovec in handle_tx()

just advance the msg.msg_iter and be done with that.

Cc: Michael S. Tsirkin <mst@redhat.com>
Cc: kvm@vger.kernel.org
Cc: virtualization@lists.linux-foundation.org
Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent aad9a1ce
...@@ -336,7 +336,7 @@ static void handle_tx(struct vhost_net *net) ...@@ -336,7 +336,7 @@ static void handle_tx(struct vhost_net *net)
{ {
struct vhost_net_virtqueue *nvq = &net->vqs[VHOST_NET_VQ_TX]; struct vhost_net_virtqueue *nvq = &net->vqs[VHOST_NET_VQ_TX];
struct vhost_virtqueue *vq = &nvq->vq; struct vhost_virtqueue *vq = &nvq->vq;
unsigned out, in, s; unsigned out, in;
int head; int head;
struct msghdr msg = { struct msghdr msg = {
.msg_name = NULL, .msg_name = NULL,
...@@ -395,16 +395,17 @@ static void handle_tx(struct vhost_net *net) ...@@ -395,16 +395,17 @@ static void handle_tx(struct vhost_net *net)
break; break;
} }
/* Skip header. TODO: support TSO. */ /* Skip header. TODO: support TSO. */
s = move_iovec_hdr(vq->iov, nvq->hdr, hdr_size, out);
len = iov_length(vq->iov, out); len = iov_length(vq->iov, out);
iov_iter_init(&msg.msg_iter, WRITE, vq->iov, out, len); iov_iter_init(&msg.msg_iter, WRITE, vq->iov, out, len);
iov_iter_advance(&msg.msg_iter, hdr_size);
/* Sanity check */ /* Sanity check */
if (!len) { if (!iov_iter_count(&msg.msg_iter)) {
vq_err(vq, "Unexpected header len for TX: " vq_err(vq, "Unexpected header len for TX: "
"%zd expected %zd\n", "%zd expected %zd\n",
iov_length(nvq->hdr, s), hdr_size); len, hdr_size);
break; break;
} }
len = iov_iter_count(&msg.msg_iter);
zcopy_used = zcopy && len >= VHOST_GOODCOPY_LEN zcopy_used = zcopy && len >= VHOST_GOODCOPY_LEN
&& (nvq->upend_idx + 1) % UIO_MAXIOV != && (nvq->upend_idx + 1) % UIO_MAXIOV !=
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment