virtio/vsock: support MSG_EOR bit processing
authorArseny Krasnov <arseny.krasnov@kaspersky.com>
Fri, 3 Sep 2021 12:32:48 +0000 (15:32 +0300)
committerMichael S. Tsirkin <mst@redhat.com>
Sun, 5 Sep 2021 20:23:09 +0000 (16:23 -0400)
If packet has 'EOR' bit - set MSG_EOR in 'recvmsg()' flags.

Signed-off-by: Arseny Krasnov <arseny.krasnov@kaspersky.com>
Reviewed-by: Stefano Garzarella <sgarzare@redhat.com>
Link: https://lore.kernel.org/r/20210903123251.3273639-1-arseny.krasnov@kaspersky.com
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
net/vmw_vsock/virtio_transport_common.c

index 4d5a93b..59ee1be 100644 (file)
@@ -76,8 +76,12 @@ virtio_transport_alloc_pkt(struct virtio_vsock_pkt_info *info,
                        goto out;
 
                if (msg_data_left(info->msg) == 0 &&
-                   info->type == VIRTIO_VSOCK_TYPE_SEQPACKET)
+                   info->type == VIRTIO_VSOCK_TYPE_SEQPACKET) {
                        pkt->hdr.flags |= cpu_to_le32(VIRTIO_VSOCK_SEQ_EOM);
+
+                       if (info->msg->msg_flags & MSG_EOR)
+                               pkt->hdr.flags |= cpu_to_le32(VIRTIO_VSOCK_SEQ_EOR);
+               }
        }
 
        trace_virtio_transport_alloc_pkt(src_cid, src_port,
@@ -460,6 +464,9 @@ static int virtio_transport_seqpacket_do_dequeue(struct vsock_sock *vsk,
                if (le32_to_cpu(pkt->hdr.flags) & VIRTIO_VSOCK_SEQ_EOM) {
                        msg_ready = true;
                        vvs->msg_count--;
+
+                       if (le32_to_cpu(pkt->hdr.flags) & VIRTIO_VSOCK_SEQ_EOR)
+                               msg->msg_flags |= MSG_EOR;
                }
 
                virtio_transport_dec_rx_pkt(vvs, pkt);