Commit 4c5a8442 authored by Michael S. Tsirkin's avatar Michael S. Tsirkin Committed by David S. Miller

vhost: cleanup iterator update logic

Recent iterator-related changes in vhost made it
harder to follow the logic fixing up the header.
In fact, the fixup always happens at the same
offset: sizeof(virtio_net_hdr): sometimes the
fixup iterator is updated by copy_to_iter,
sometimes-by iov_iter_advance.

Rearrange code to make this obvious.
Signed-off-by: default avatarMichael S. Tsirkin <mst@redhat.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 5f2ebfbe
...@@ -591,11 +591,6 @@ static void handle_rx(struct vhost_net *net) ...@@ -591,11 +591,6 @@ static void handle_rx(struct vhost_net *net)
* TODO: support TSO. * TODO: support TSO.
*/ */
iov_iter_advance(&msg.msg_iter, vhost_hlen); iov_iter_advance(&msg.msg_iter, vhost_hlen);
} else {
/* It'll come from socket; we'll need to patch
* ->num_buffers over if VIRTIO_NET_F_MRG_RXBUF
*/
iov_iter_advance(&fixup, sizeof(hdr));
} }
err = sock->ops->recvmsg(NULL, sock, &msg, err = sock->ops->recvmsg(NULL, sock, &msg,
sock_len, MSG_DONTWAIT | MSG_TRUNC); sock_len, MSG_DONTWAIT | MSG_TRUNC);
...@@ -609,12 +604,19 @@ static void handle_rx(struct vhost_net *net) ...@@ -609,12 +604,19 @@ static void handle_rx(struct vhost_net *net)
continue; continue;
} }
/* Supply virtio_net_hdr if VHOST_NET_F_VIRTIO_NET_HDR */ /* Supply virtio_net_hdr if VHOST_NET_F_VIRTIO_NET_HDR */
if (unlikely(vhost_hlen) && if (unlikely(vhost_hlen)) {
copy_to_iter(&hdr, sizeof(hdr), &fixup) != sizeof(hdr)) { if (copy_to_iter(&hdr, sizeof(hdr),
vq_err(vq, "Unable to write vnet_hdr at addr %p\n", &fixup) != sizeof(hdr)) {
vq->iov->iov_base); vq_err(vq, "Unable to write vnet_hdr "
"at addr %p\n", vq->iov->iov_base);
break; break;
} }
} else {
/* Header came from socket; we'll need to patch
* ->num_buffers over if VIRTIO_NET_F_MRG_RXBUF
*/
iov_iter_advance(&fixup, sizeof(hdr));
}
/* TODO: Should check and handle checksum. */ /* TODO: Should check and handle checksum. */
num_buffers = cpu_to_vhost16(vq, headcount); num_buffers = cpu_to_vhost16(vq, headcount);
......
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