qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v1 1/1] QIOChannelSocket: Add support for MSG_ZEROCOPY + IPV6
@ 2022-08-04  7:10 Leonardo Bras
  2022-08-04  9:38 ` Daniel P. Berrangé
  2022-08-04 14:05 ` Peter Xu
  0 siblings, 2 replies; 3+ messages in thread
From: Leonardo Bras @ 2022-08-04  7:10 UTC (permalink / raw)
  To: Peter Xu, Dr . David Alan Gilbert, Daniel P. Berrangé
  Cc: Leonardo Bras, qemu-devel

For using MSG_ZEROCOPY, there are two steps:
1 - io_writev() the packet, which enqueues the packet for sending, and
2 - io_flush(), which gets confirmation that all packets got correctly sent

Currently, if MSG_ZEROCOPY is used to send packets over IPV6, no error will
be reported in (1), but it will fail in the first time (2) happens.

This happens because (2) currently checks for cmsg_level & cmsg_type
associated with IPV4 only, before reporting any error.

Add checks for cmsg_level & cmsg_type associated with IPV6, and thus enable
support for MSG_ZEROCOPY + IPV6

Fixes: 2bc58ffc29 ("QIOChannelSocket: Implement io_writev zero copy flag & io_flush for CONFIG_LINUX")
Signed-off-by: Leonardo Bras <leobras@redhat.com>
---
 io/channel-socket.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/io/channel-socket.c b/io/channel-socket.c
index e6e7a12ae1..4f6bb6fe37 100644
--- a/io/channel-socket.c
+++ b/io/channel-socket.c
@@ -815,8 +815,8 @@ static int qio_channel_socket_flush(QIOChannel *ioc,
         }
 
         cm = CMSG_FIRSTHDR(&msg);
-        if (cm->cmsg_level != SOL_IP &&
-            cm->cmsg_type != IP_RECVERR) {
+        if (cm->cmsg_level != SOL_IP   && cm->cmsg_type != IP_RECVERR &&
+            cm->cmsg_level != SOL_IPV6 && cm->cmsg_type != IPV6_RECVERR) {
             error_setg_errno(errp, EPROTOTYPE,
                              "Wrong cmsg in errqueue");
             return -1;
-- 
2.37.1



^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH v1 1/1] QIOChannelSocket: Add support for MSG_ZEROCOPY + IPV6
  2022-08-04  7:10 [PATCH v1 1/1] QIOChannelSocket: Add support for MSG_ZEROCOPY + IPV6 Leonardo Bras
@ 2022-08-04  9:38 ` Daniel P. Berrangé
  2022-08-04 14:05 ` Peter Xu
  1 sibling, 0 replies; 3+ messages in thread
From: Daniel P. Berrangé @ 2022-08-04  9:38 UTC (permalink / raw)
  To: Leonardo Bras; +Cc: Peter Xu, Dr . David Alan Gilbert, qemu-devel

On Thu, Aug 04, 2022 at 04:10:43AM -0300, Leonardo Bras wrote:
> For using MSG_ZEROCOPY, there are two steps:
> 1 - io_writev() the packet, which enqueues the packet for sending, and
> 2 - io_flush(), which gets confirmation that all packets got correctly sent
> 
> Currently, if MSG_ZEROCOPY is used to send packets over IPV6, no error will
> be reported in (1), but it will fail in the first time (2) happens.
> 
> This happens because (2) currently checks for cmsg_level & cmsg_type
> associated with IPV4 only, before reporting any error.
> 
> Add checks for cmsg_level & cmsg_type associated with IPV6, and thus enable
> support for MSG_ZEROCOPY + IPV6

Oh, subtle.

> 
> Fixes: 2bc58ffc29 ("QIOChannelSocket: Implement io_writev zero copy flag & io_flush for CONFIG_LINUX")
> Signed-off-by: Leonardo Bras <leobras@redhat.com>
> ---
>  io/channel-socket.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)

Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>


With regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|



^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH v1 1/1] QIOChannelSocket: Add support for MSG_ZEROCOPY + IPV6
  2022-08-04  7:10 [PATCH v1 1/1] QIOChannelSocket: Add support for MSG_ZEROCOPY + IPV6 Leonardo Bras
  2022-08-04  9:38 ` Daniel P. Berrangé
@ 2022-08-04 14:05 ` Peter Xu
  1 sibling, 0 replies; 3+ messages in thread
From: Peter Xu @ 2022-08-04 14:05 UTC (permalink / raw)
  To: Leonardo Bras
  Cc: Dr . David Alan Gilbert, Daniel P. Berrangé, qemu-devel

On Thu, Aug 04, 2022 at 04:10:43AM -0300, Leonardo Bras wrote:
> For using MSG_ZEROCOPY, there are two steps:
> 1 - io_writev() the packet, which enqueues the packet for sending, and
> 2 - io_flush(), which gets confirmation that all packets got correctly sent
> 
> Currently, if MSG_ZEROCOPY is used to send packets over IPV6, no error will
> be reported in (1), but it will fail in the first time (2) happens.
> 
> This happens because (2) currently checks for cmsg_level & cmsg_type
> associated with IPV4 only, before reporting any error.
> 
> Add checks for cmsg_level & cmsg_type associated with IPV6, and thus enable
> support for MSG_ZEROCOPY + IPV6
> 
> Fixes: 2bc58ffc29 ("QIOChannelSocket: Implement io_writev zero copy flag & io_flush for CONFIG_LINUX")
> Signed-off-by: Leonardo Bras <leobras@redhat.com>

Reviewed-by: Peter Xu <peterx@redhat.com>

-- 
Peter Xu



^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2022-08-04 14:07 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-08-04  7:10 [PATCH v1 1/1] QIOChannelSocket: Add support for MSG_ZEROCOPY + IPV6 Leonardo Bras
2022-08-04  9:38 ` Daniel P. Berrangé
2022-08-04 14:05 ` Peter Xu

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).