Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+5 −4
Original line number Diff line number Diff line
@@ -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_virtqueue *vq = &nvq->vq;
	unsigned out, in, s;
	unsigned out, in;
	int head;
	struct msghdr msg = {
		.msg_name = NULL,
@@ -395,16 +395,17 @@ static void handle_tx(struct vhost_net *net)
			break;
		}
		/* Skip header. TODO: support TSO. */
		s = move_iovec_hdr(vq->iov, nvq->hdr, hdr_size, out);
		len = iov_length(vq->iov, out);
		iov_iter_init(&msg.msg_iter, WRITE, vq->iov, out, len);
		iov_iter_advance(&msg.msg_iter, hdr_size);
		/* Sanity check */
		if (!len) {
		if (!iov_iter_count(&msg.msg_iter)) {
			vq_err(vq, "Unexpected header len for TX: "
			       "%zd expected %zd\n",
			       iov_length(nvq->hdr, s), hdr_size);
			       len, hdr_size);
			break;
		}
		len = iov_iter_count(&msg.msg_iter);

		zcopy_used = zcopy && len >= VHOST_GOODCOPY_LEN
				   && (nvq->upend_idx + 1) % UIO_MAXIOV !=