From: Stefano Garzarella <sgarzare@redhat.com> To: Arseny Krasnov <arseny.krasnov@kaspersky.com> Cc: Stefan Hajnoczi <stefanha@redhat.com>, "Michael S. Tsirkin" <mst@redhat.com>, Jason Wang <jasowang@redhat.com>, "David S. Miller" <davem@davemloft.net>, Jakub Kicinski <kuba@kernel.org>, Jorgen Hansen <jhansen@vmware.com>, Colin Ian King <colin.king@canonical.com>, Andra Paraschiv <andraprs@amazon.com>, Norbert Slusarek <nslusarek@gmx.net>, Alexander Popov <alex.popov@linux.com>, kvm <kvm@vger.kernel.org>, Linux Virtualization <virtualization@lists.linux-foundation.org>, netdev <netdev@vger.kernel.org>, kernel list <linux-kernel@vger.kernel.org>, stsp <stsp2@yandex.ru>, Krasnov Arseniy <oxffffaa@gmail.com> Subject: Re: [RFC PATCH v8 13/19] virtio/vsock: rest of SOCK_SEQPACKET support Date: Wed, 21 Apr 2021 11:12:28 +0200 [thread overview] Message-ID: <CAGxU2F6A3-pY5We-pC7-k-3v-tOdKnFvHEAs7eGo4bHnD=sM5Q@mail.gmail.com> (raw) In-Reply-To: <20210413124528.3404287-1-arseny.krasnov@kaspersky.com> On Tue, Apr 13, 2021 at 03:45:25PM +0300, Arseny Krasnov wrote: >This adds rest of logic for SEQPACKET: >1) Send SHUTDOWN on socket close for SEQPACKET type. >2) Set SEQPACKET packet type during send. >3) 'seqpacket_allow' flag to virtio transport. >4) Set 'VIRTIO_VSOCK_SEQ_EOR' bit in flags for last > packet of message. > >Signed-off-by: Arseny Krasnov <arseny.krasnov@kaspersky.com> >--- >v7 -> v8: > - MSG_EOR handling is removed, i didn't found exact description about > how it works in POSIX. > - SEQ_BEGIN, SEQ_END, etc. now removed. > > include/linux/virtio_vsock.h | 6 ++++++ > net/vmw_vsock/virtio_transport_common.c | 16 ++++++++++++++-- > 2 files changed, 20 insertions(+), 2 deletions(-) > >diff --git a/include/linux/virtio_vsock.h b/include/linux/virtio_vsock.h >index 02acf6e9ae04..f00a01bfdd7e 100644 >--- a/include/linux/virtio_vsock.h >+++ b/include/linux/virtio_vsock.h >@@ -68,6 +68,8 @@ struct virtio_transport { > > /* Takes ownership of the packet */ > int (*send_pkt)(struct virtio_vsock_pkt *pkt); >+ >+ bool seqpacket_allow; > }; > > ssize_t >@@ -80,6 +82,10 @@ virtio_transport_dgram_dequeue(struct vsock_sock *vsk, > struct msghdr *msg, > size_t len, int flags); > >+int >+virtio_transport_seqpacket_enqueue(struct vsock_sock *vsk, >+ struct msghdr *msg, >+ size_t len); > ssize_t > virtio_transport_seqpacket_dequeue(struct vsock_sock *vsk, > struct msghdr *msg, >diff --git a/net/vmw_vsock/virtio_transport_common.c b/net/vmw_vsock/virtio_transport_common.c >index 572869fef832..4c5b63601308 100644 >--- a/net/vmw_vsock/virtio_transport_common.c >+++ b/net/vmw_vsock/virtio_transport_common.c >@@ -74,6 +74,9 @@ virtio_transport_alloc_pkt(struct virtio_vsock_pkt_info *info, > err = memcpy_from_msg(pkt->buf, info->msg, len); > if (err) > goto out; >+ >+ if (info->msg->msg_iter.count == 0) >+ pkt->hdr.flags |= VIRTIO_VSOCK_SEQ_EOR; We should set the flag in info->flags and assign it using cpu_to_le32() or just the following: pkt->hdr.flags = cpu_to_le32(info->flags | VIRTIO_VSOCK_SEQ_EOR); > } > > trace_virtio_transport_alloc_pkt(src_cid, src_port, >@@ -187,7 +190,7 @@ static int virtio_transport_send_pkt_info(struct vsock_sock *vsk, > struct virtio_vsock_pkt *pkt; > u32 pkt_len = info->pkt_len; > >- info->type = VIRTIO_VSOCK_TYPE_STREAM; >+ info->type = virtio_transport_get_type(sk_vsock(vsk)); > > t_ops = virtio_transport_get_ops(vsk); > if (unlikely(!t_ops)) >@@ -486,6 +489,15 @@ virtio_transport_seqpacket_dequeue(struct >vsock_sock *vsk, > } > EXPORT_SYMBOL_GPL(virtio_transport_seqpacket_dequeue); > >+int >+virtio_transport_seqpacket_enqueue(struct vsock_sock *vsk, >+ struct msghdr *msg, >+ size_t len) >+{ >+ return virtio_transport_stream_enqueue(vsk, msg, len); >+} >+EXPORT_SYMBOL_GPL(virtio_transport_seqpacket_enqueue); >+ > int > virtio_transport_dgram_dequeue(struct vsock_sock *vsk, > struct msghdr *msg, >@@ -905,7 +917,7 @@ void virtio_transport_release(struct vsock_sock *vsk) > struct sock *sk = &vsk->sk; > bool remove_sock = true; > >- if (sk->sk_type == SOCK_STREAM) >+ if (sk->sk_type == SOCK_STREAM || sk->sk_type == SOCK_SEQPACKET) > remove_sock = virtio_transport_close(vsk); > > list_for_each_entry_safe(pkt, tmp, &vvs->rx_queue, list) { >-- >2.25.1 >
WARNING: multiple messages have this Message-ID (diff)
From: Stefano Garzarella <sgarzare@redhat.com> To: Arseny Krasnov <arseny.krasnov@kaspersky.com> Cc: Andra Paraschiv <andraprs@amazon.com>, kvm <kvm@vger.kernel.org>, "Michael S. Tsirkin" <mst@redhat.com>, netdev <netdev@vger.kernel.org>, stsp <stsp2@yandex.ru>, kernel list <linux-kernel@vger.kernel.org>, Linux Virtualization <virtualization@lists.linux-foundation.org>, Krasnov Arseniy <oxffffaa@gmail.com>, Norbert Slusarek <nslusarek@gmx.net>, Stefan Hajnoczi <stefanha@redhat.com>, Colin Ian King <colin.king@canonical.com>, Jakub Kicinski <kuba@kernel.org>, "David S. Miller" <davem@davemloft.net>, Jorgen Hansen <jhansen@vmware.com>, Alexander Popov <alex.popov@linux.com> Subject: Re: [RFC PATCH v8 13/19] virtio/vsock: rest of SOCK_SEQPACKET support Date: Wed, 21 Apr 2021 11:12:28 +0200 [thread overview] Message-ID: <CAGxU2F6A3-pY5We-pC7-k-3v-tOdKnFvHEAs7eGo4bHnD=sM5Q@mail.gmail.com> (raw) In-Reply-To: <20210413124528.3404287-1-arseny.krasnov@kaspersky.com> On Tue, Apr 13, 2021 at 03:45:25PM +0300, Arseny Krasnov wrote: >This adds rest of logic for SEQPACKET: >1) Send SHUTDOWN on socket close for SEQPACKET type. >2) Set SEQPACKET packet type during send. >3) 'seqpacket_allow' flag to virtio transport. >4) Set 'VIRTIO_VSOCK_SEQ_EOR' bit in flags for last > packet of message. > >Signed-off-by: Arseny Krasnov <arseny.krasnov@kaspersky.com> >--- >v7 -> v8: > - MSG_EOR handling is removed, i didn't found exact description about > how it works in POSIX. > - SEQ_BEGIN, SEQ_END, etc. now removed. > > include/linux/virtio_vsock.h | 6 ++++++ > net/vmw_vsock/virtio_transport_common.c | 16 ++++++++++++++-- > 2 files changed, 20 insertions(+), 2 deletions(-) > >diff --git a/include/linux/virtio_vsock.h b/include/linux/virtio_vsock.h >index 02acf6e9ae04..f00a01bfdd7e 100644 >--- a/include/linux/virtio_vsock.h >+++ b/include/linux/virtio_vsock.h >@@ -68,6 +68,8 @@ struct virtio_transport { > > /* Takes ownership of the packet */ > int (*send_pkt)(struct virtio_vsock_pkt *pkt); >+ >+ bool seqpacket_allow; > }; > > ssize_t >@@ -80,6 +82,10 @@ virtio_transport_dgram_dequeue(struct vsock_sock *vsk, > struct msghdr *msg, > size_t len, int flags); > >+int >+virtio_transport_seqpacket_enqueue(struct vsock_sock *vsk, >+ struct msghdr *msg, >+ size_t len); > ssize_t > virtio_transport_seqpacket_dequeue(struct vsock_sock *vsk, > struct msghdr *msg, >diff --git a/net/vmw_vsock/virtio_transport_common.c b/net/vmw_vsock/virtio_transport_common.c >index 572869fef832..4c5b63601308 100644 >--- a/net/vmw_vsock/virtio_transport_common.c >+++ b/net/vmw_vsock/virtio_transport_common.c >@@ -74,6 +74,9 @@ virtio_transport_alloc_pkt(struct virtio_vsock_pkt_info *info, > err = memcpy_from_msg(pkt->buf, info->msg, len); > if (err) > goto out; >+ >+ if (info->msg->msg_iter.count == 0) >+ pkt->hdr.flags |= VIRTIO_VSOCK_SEQ_EOR; We should set the flag in info->flags and assign it using cpu_to_le32() or just the following: pkt->hdr.flags = cpu_to_le32(info->flags | VIRTIO_VSOCK_SEQ_EOR); > } > > trace_virtio_transport_alloc_pkt(src_cid, src_port, >@@ -187,7 +190,7 @@ static int virtio_transport_send_pkt_info(struct vsock_sock *vsk, > struct virtio_vsock_pkt *pkt; > u32 pkt_len = info->pkt_len; > >- info->type = VIRTIO_VSOCK_TYPE_STREAM; >+ info->type = virtio_transport_get_type(sk_vsock(vsk)); > > t_ops = virtio_transport_get_ops(vsk); > if (unlikely(!t_ops)) >@@ -486,6 +489,15 @@ virtio_transport_seqpacket_dequeue(struct >vsock_sock *vsk, > } > EXPORT_SYMBOL_GPL(virtio_transport_seqpacket_dequeue); > >+int >+virtio_transport_seqpacket_enqueue(struct vsock_sock *vsk, >+ struct msghdr *msg, >+ size_t len) >+{ >+ return virtio_transport_stream_enqueue(vsk, msg, len); >+} >+EXPORT_SYMBOL_GPL(virtio_transport_seqpacket_enqueue); >+ > int > virtio_transport_dgram_dequeue(struct vsock_sock *vsk, > struct msghdr *msg, >@@ -905,7 +917,7 @@ void virtio_transport_release(struct vsock_sock *vsk) > struct sock *sk = &vsk->sk; > bool remove_sock = true; > >- if (sk->sk_type == SOCK_STREAM) >+ if (sk->sk_type == SOCK_STREAM || sk->sk_type == SOCK_SEQPACKET) > remove_sock = virtio_transport_close(vsk); > > list_for_each_entry_safe(pkt, tmp, &vvs->rx_queue, list) { >-- >2.25.1 > _______________________________________________ Virtualization mailing list Virtualization@lists.linux-foundation.org https://lists.linuxfoundation.org/mailman/listinfo/virtualization
next prev parent reply other threads:[~2021-04-21 9:12 UTC|newest] Thread overview: 56+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-04-13 12:39 [RFC PATCH v8 00/19] virtio/vsock: introduce SOCK_SEQPACKET support Arseny Krasnov 2021-04-13 12:41 ` [RFC PATCH v8 01/19] af_vsock: update functions for connectible socket Arseny Krasnov 2021-04-13 12:42 ` [RFC PATCH v8 02/19] af_vsock: separate wait data loop Arseny Krasnov 2021-04-13 12:42 ` [RFC PATCH v8 03/19] af_vsock: separate receive " Arseny Krasnov 2021-04-13 12:42 ` [RFC PATCH v8 04/19] af_vsock: implement SEQPACKET receive loop Arseny Krasnov 2021-04-21 8:37 ` Stefano Garzarella 2021-04-21 8:37 ` Stefano Garzarella 2021-04-21 14:47 ` Arseny Krasnov 2021-04-13 12:43 ` [RFC PATCH v8 05/19] af_vsock: implement send logic for SEQPACKET Arseny Krasnov 2021-04-13 12:43 ` [RFC PATCH v8 06/19] af_vsock: rest of SEQPACKET support Arseny Krasnov 2021-04-13 12:43 ` [RFC PATCH v8 07/19] af_vsock: update comments for stream sockets Arseny Krasnov 2021-04-13 12:43 ` [RFC PATCH v8 08/19] virtio/vsock: set packet's type in virtio_transport_send_pkt_info() Arseny Krasnov 2021-04-13 12:44 ` [RFC PATCH v8 09/19] virtio/vsock: simplify credit update function API Arseny Krasnov 2021-04-13 12:44 ` [RFC PATCH v8 10/19] virtio/vsock: defines and constants for SEQPACKET Arseny Krasnov 2021-04-13 12:44 ` [RFC PATCH v8 11/19] virtio/vsock: dequeue callback for SOCK_SEQPACKET Arseny Krasnov 2021-04-13 22:50 ` kernel test robot 2021-04-14 5:21 ` Arseny Krasnov 2021-04-21 8:56 ` Stefano Garzarella 2021-04-21 8:56 ` Stefano Garzarella 2021-04-21 14:49 ` Arseny Krasnov 2021-04-13 12:45 ` [RFC PATCH v8 12/19] virtio/vsock: add SEQPACKET receive logic Arseny Krasnov 2021-04-13 12:45 ` [RFC PATCH v8 13/19] virtio/vsock: rest of SOCK_SEQPACKET support Arseny Krasnov 2021-04-21 9:12 ` Stefano Garzarella [this message] 2021-04-21 9:12 ` Stefano Garzarella 2021-04-21 14:50 ` Arseny Krasnov 2021-04-13 12:45 ` [RFC PATCH v8 14/19] virtio/vsock: enable SEQPACKET for transport Arseny Krasnov 2021-04-21 9:22 ` Stefano Garzarella 2021-04-21 9:22 ` Stefano Garzarella 2021-04-13 12:46 ` [RFC PATCH v8 15/19] vhost/vsock: " Arseny Krasnov 2021-04-21 9:31 ` Stefano Garzarella 2021-04-21 9:31 ` Stefano Garzarella 2021-04-13 12:46 ` [RFC PATCH v8 16/19] vsock/loopback: " Arseny Krasnov 2021-04-21 9:34 ` Stefano Garzarella 2021-04-21 9:34 ` Stefano Garzarella 2021-04-13 12:46 ` [RFC PATCH v8 17/19] vsock_test: add SOCK_SEQPACKET tests Arseny Krasnov 2021-04-21 9:35 ` Stefano Garzarella 2021-04-21 9:35 ` Stefano Garzarella 2021-04-21 15:00 ` Arseny Krasnov 2021-04-13 12:47 ` [RFC PATCH v8 18/19] virtio/vsock: update trace event for SEQPACKET Arseny Krasnov 2021-04-13 12:47 ` [RFC PATCH v8 19/19] af_vsock: serialize writes to shared socket Arseny Krasnov 2021-04-14 10:51 ` Arseny Krasnov 2021-04-21 9:38 ` Stefano Garzarella 2021-04-21 9:38 ` Stefano Garzarella 2021-04-21 15:02 ` Arseny Krasnov 2021-04-21 9:52 ` [RFC PATCH v8 00/19] virtio/vsock: introduce SOCK_SEQPACKET support Stefano Garzarella 2021-04-21 9:52 ` Stefano Garzarella 2021-04-21 15:06 ` Arseny Krasnov 2021-04-22 8:46 ` Stefano Garzarella 2021-04-22 8:46 ` Stefano Garzarella 2021-04-22 9:40 ` Arseny Krasnov 2021-04-22 10:02 ` Stefano Garzarella 2021-04-22 10:02 ` Stefano Garzarella 2021-04-22 10:29 ` Arseny Krasnov 2021-04-22 10:48 ` Stefano Garzarella 2021-04-22 10:48 ` Stefano Garzarella 2021-04-22 11:41 ` Arseny Krasnov
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to='CAGxU2F6A3-pY5We-pC7-k-3v-tOdKnFvHEAs7eGo4bHnD=sM5Q@mail.gmail.com' \ --to=sgarzare@redhat.com \ --cc=alex.popov@linux.com \ --cc=andraprs@amazon.com \ --cc=arseny.krasnov@kaspersky.com \ --cc=colin.king@canonical.com \ --cc=davem@davemloft.net \ --cc=jasowang@redhat.com \ --cc=jhansen@vmware.com \ --cc=kuba@kernel.org \ --cc=kvm@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=mst@redhat.com \ --cc=netdev@vger.kernel.org \ --cc=nslusarek@gmx.net \ --cc=oxffffaa@gmail.com \ --cc=stefanha@redhat.com \ --cc=stsp2@yandex.ru \ --cc=virtualization@lists.linux-foundation.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.