[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20210805090657.y2sz3pzhruuolncq@steredhat>
Date: Thu, 5 Aug 2021 11:06:57 +0200
From: Stefano Garzarella <sgarzare@...hat.com>
To: Arseny Krasnov <arseny.krasnov@...persky.com>
Cc: Stefan Hajnoczi <stefanha@...hat.com>,
"Michael S. Tsirkin" <mst@...hat.com>,
Jason Wang <jasowang@...hat.com>,
"David S. Miller" <davem@...emloft.net>,
Jakub Kicinski <kuba@...nel.org>,
Colin Ian King <colin.king@...onical.com>,
Andra Paraschiv <andraprs@...zon.com>,
Norbert Slusarek <nslusarek@....net>,
"kvm@...r.kernel.org" <kvm@...r.kernel.org>,
"virtualization@...ts.linux-foundation.org"
<virtualization@...ts.linux-foundation.org>,
"netdev@...r.kernel.org" <netdev@...r.kernel.org>,
"linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>,
"oxffffaa@...il.com" <oxffffaa@...il.com>
Subject: Re: [RFC PATCH v1 0/7] virtio/vsock: introduce MSG_EOR flag for
SEQPACKET
On Thu, Aug 05, 2021 at 11:33:12AM +0300, Arseny Krasnov wrote:
>
>On 04.08.2021 15:57, Stefano Garzarella wrote:
>> Caution: This is an external email. Be cautious while opening links or attachments.
>>
>>
>>
>> Hi Arseny,
>>
>> On Mon, Jul 26, 2021 at 07:31:33PM +0300, Arseny Krasnov wrote:
>>> This patchset implements support of MSG_EOR bit for SEQPACKET
>>> AF_VSOCK sockets over virtio transport.
>>> Idea is to distinguish concepts of 'messages' and 'records'.
>>> Message is result of sending calls: 'write()', 'send()', 'sendmsg()'
>>> etc. It has fixed maximum length, and it bounds are visible using
>>> return from receive calls: 'read()', 'recv()', 'recvmsg()' etc.
>>> Current implementation based on message definition above.
>> Okay, so the implementation we merged is wrong right?
>> Should we disable the feature bit in stable kernels that contain it? Or
>> maybe we can backport the fixes...
>
>Hi,
>
>No, this is correct and it is message boundary based. Idea of this
>patchset is to add extra boundaries marker which i think could be
>useful when we want to send data in seqpacket mode which length
>is bigger than maximum message length(this is limited by transport).
>Of course we can fragment big piece of data too small messages, but
>this
>requires to carry fragmentation info in data protocol. So In this case
>when we want to maintain boundaries receiver calls recvmsg() until
>MSG_EOR found.
>But when receiver knows, that data is fit in maximum datagram length,
>it doesn't care about checking MSG_EOR just calling recv() or
>read()(e.g.
>message based mode).
I'm not sure we should maintain boundaries of multiple send(), from
POSIX standard [1]:
SOCK_SEQPACKET
Provides sequenced, reliable, bidirectional, connection-mode
transmission paths for records. A record can be sent using one or
more output operations and received using one or more input
operations, but a single operation never transfers part of more than
one record. Record boundaries are visible to the receiver via the
MSG_EOR flag.
From my understanding a record could be sent with multiple send() and
received, for example, with a single recvmsg().
The only boundary should be the MSG_EOR flag set by the user on the last
send() of a record.
From send() description [2]:
MSG_EOR
Terminates a record (if supported by the protocol).
From recvmsg() description [3]:
MSG_EOR
End-of-record was received (if supported by the protocol).
Thanks,
Stefano
[1]
https://pubs.opengroup.org/onlinepubs/9699919799/functions/socket.html
[2] https://pubs.opengroup.org/onlinepubs/9699919799/functions/send.html
[3]
https://pubs.opengroup.org/onlinepubs/9699919799/functions/recvmsg.html
Powered by blists - more mailing lists