|
@@ -307,6 +307,8 @@ static void vhost_vsock_handle_tx_kick(struct vhost_work *work)
|
|
|
|
|
|
vhost_disable_notify(&vsock->dev, vq);
|
|
vhost_disable_notify(&vsock->dev, vq);
|
|
for (;;) {
|
|
for (;;) {
|
|
|
|
+ u32 len;
|
|
|
|
+
|
|
if (!vhost_vsock_more_replies(vsock)) {
|
|
if (!vhost_vsock_more_replies(vsock)) {
|
|
/* Stop tx until the device processes already
|
|
/* Stop tx until the device processes already
|
|
* pending replies. Leave tx virtqueue
|
|
* pending replies. Leave tx virtqueue
|
|
@@ -334,13 +336,15 @@ static void vhost_vsock_handle_tx_kick(struct vhost_work *work)
|
|
continue;
|
|
continue;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ len = pkt->len;
|
|
|
|
+
|
|
/* Only accept correctly addressed packets */
|
|
/* Only accept correctly addressed packets */
|
|
if (le64_to_cpu(pkt->hdr.src_cid) == vsock->guest_cid)
|
|
if (le64_to_cpu(pkt->hdr.src_cid) == vsock->guest_cid)
|
|
virtio_transport_recv_pkt(pkt);
|
|
virtio_transport_recv_pkt(pkt);
|
|
else
|
|
else
|
|
virtio_transport_free_pkt(pkt);
|
|
virtio_transport_free_pkt(pkt);
|
|
|
|
|
|
- vhost_add_used(vq, head, sizeof(pkt->hdr) + pkt->len);
|
|
|
|
|
|
+ vhost_add_used(vq, head, sizeof(pkt->hdr) + len);
|
|
added = true;
|
|
added = true;
|
|
}
|
|
}
|
|
|
|
|