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: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
Родитель
aad9a1cec7
Коммит
98a527aac1
|
@ -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 !=
|
||||
|
|
Загрузка…
Ссылка в новой задаче