|
@@ -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 !=
|