Stefano Garzarella
2021-Aug-11 09:00 UTC
[RFC PATCH v2 1/5] virtio/vsock: add 'VIRTIO_VSOCK_SEQ_EOM' bit
On Tue, Aug 10, 2021 at 02:39:53PM +0300, Arseny Krasnov wrote: The title is confusing, we are renaming EOR in EOM.>This bit is used to mark end of messages('EOM' - end of message), while >'VIRIO_VSOCK_SEQ_EOR' is used to pass MSG_EOR. Also rename 'record' to >'message' in implementation as it is different things. > >Signed-off-by: Arseny Krasnov <arseny.krasnov at kaspersky.com> >--- > drivers/vhost/vsock.c | 12 ++++++------ > include/uapi/linux/virtio_vsock.h | 3 ++- > net/vmw_vsock/virtio_transport_common.c | 14 +++++++------- > 3 files changed, 15 insertions(+), 14 deletions(-) > >diff --git a/drivers/vhost/vsock.c b/drivers/vhost/vsock.c >index f249622ef11b..feaf650affbe 100644 >--- a/drivers/vhost/vsock.c >+++ b/drivers/vhost/vsock.c >@@ -178,15 +178,15 @@ vhost_transport_do_send_pkt(struct vhost_vsock *vsock, > * small rx buffers, headers of packets in rx queue are > * created dynamically and are initialized with > header > * of current packet(except length). But in case of >- * SOCK_SEQPACKET, we also must clear record delimeter >- * bit(VIRTIO_VSOCK_SEQ_EOR). Otherwise, instead of one >- * packet with delimeter(which marks end of record), >+ * SOCK_SEQPACKET, we also must clear message delimeter >+ * bit(VIRTIO_VSOCK_SEQ_EOM). Otherwise, instead of one >+ * packet with delimeter(which marks end of message), > * there will be sequence of packets with delimeter > * bit set. After initialized header will be copied to > * rx buffer, this bit will be restored. > */ >- if (le32_to_cpu(pkt->hdr.flags) & VIRTIO_VSOCK_SEQ_EOR) { >- pkt->hdr.flags &= ~cpu_to_le32(VIRTIO_VSOCK_SEQ_EOR); >+ if (le32_to_cpu(pkt->hdr.flags) & VIRTIO_VSOCK_SEQ_EOM) { >+ pkt->hdr.flags &= ~cpu_to_le32(VIRTIO_VSOCK_SEQ_EOM); > restore_flag = true; > } > } >@@ -225,7 +225,7 @@ vhost_transport_do_send_pkt(struct vhost_vsock *vsock, > */ > if (pkt->off < pkt->len) { > if (restore_flag) >- pkt->hdr.flags |= cpu_to_le32(VIRTIO_VSOCK_SEQ_EOR); >+ pkt->hdr.flags |= cpu_to_le32(VIRTIO_VSOCK_SEQ_EOM); > > /* We are queueing the same virtio_vsock_pkt to handle > * the remaining bytes, and we want to deliver it >diff --git a/include/uapi/linux/virtio_vsock.h b/include/uapi/linux/virtio_vsock.h >index 3dd3555b2740..64738838bee5 100644 >--- a/include/uapi/linux/virtio_vsock.h >+++ b/include/uapi/linux/virtio_vsock.h >@@ -97,7 +97,8 @@ enum virtio_vsock_shutdown { > > /* VIRTIO_VSOCK_OP_RW flags values */ > enum virtio_vsock_rw { >- VIRTIO_VSOCK_SEQ_EOR = 1, >+ VIRTIO_VSOCK_SEQ_EOM = 1, >+ VIRTIO_VSOCK_SEQ_EOR = 2,^ I think is better to add this new flag in a separate patch.> }; > > #endif /* _UAPI_LINUX_VIRTIO_VSOCK_H */ >diff --git a/net/vmw_vsock/virtio_transport_common.c b/net/vmw_vsock/virtio_transport_common.c >index 081e7ae93cb1..4d5a93beceb0 100644 >--- a/net/vmw_vsock/virtio_transport_common.c >+++ b/net/vmw_vsock/virtio_transport_common.c >@@ -77,7 +77,7 @@ virtio_transport_alloc_pkt(struct virtio_vsock_pkt_info *info, > > if (msg_data_left(info->msg) == 0 && > info->type == VIRTIO_VSOCK_TYPE_SEQPACKET) >- pkt->hdr.flags |= cpu_to_le32(VIRTIO_VSOCK_SEQ_EOR); >+ pkt->hdr.flags |= cpu_to_le32(VIRTIO_VSOCK_SEQ_EOM); > } > > trace_virtio_transport_alloc_pkt(src_cid, src_port, >@@ -457,7 +457,7 @@ static int virtio_transport_seqpacket_do_dequeue(struct vsock_sock *vsk, > dequeued_len += pkt_len; > } > >- if (le32_to_cpu(pkt->hdr.flags) & VIRTIO_VSOCK_SEQ_EOR) { >+ if (le32_to_cpu(pkt->hdr.flags) & VIRTIO_VSOCK_SEQ_EOM) { > msg_ready = true; > vvs->msg_count--; > } >@@ -1029,7 +1029,7 @@ virtio_transport_recv_enqueue(struct vsock_sock *vsk, > goto out; > } > >- if (le32_to_cpu(pkt->hdr.flags) & VIRTIO_VSOCK_SEQ_EOR) >+ if (le32_to_cpu(pkt->hdr.flags) & VIRTIO_VSOCK_SEQ_EOM) > vvs->msg_count++; > > /* Try to copy small packets into the buffer of last packet queued, >@@ -1044,12 +1044,12 @@ virtio_transport_recv_enqueue(struct vsock_sock *vsk, > > /* If there is space in the last packet queued, we copy the > * new packet in its buffer. We avoid this if the last packet >- * queued has VIRTIO_VSOCK_SEQ_EOR set, because this is >- * delimiter of SEQPACKET record, so 'pkt' is the first packet >- * of a new record. >+ * queued has VIRTIO_VSOCK_SEQ_EOM set, because this is >+ * delimiter of SEQPACKET message, so 'pkt' is the first packet >+ * of a new message. > */ > if ((pkt->len <= last_pkt->buf_len - last_pkt->len) && >- !(le32_to_cpu(last_pkt->hdr.flags) & VIRTIO_VSOCK_SEQ_EOR)) { >+ !(le32_to_cpu(last_pkt->hdr.flags) & VIRTIO_VSOCK_SEQ_EOM)) { > memcpy(last_pkt->buf + last_pkt->len, pkt->buf, > pkt->len); > last_pkt->len += pkt->len; >-- >2.25.1 >The rest LGTM! Thanks, Stefano