qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 11/19] io/channel-socket: qio_channel_socket_wri


From: Vladimir Sementsov-Ogievskiy
Subject: Re: [Qemu-devel] [PATCH 11/19] io/channel-socket: qio_channel_socket_writev handle EPIPE
Date: Tue, 30 May 2017 18:15:07 +0300
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.1.1

30.05.2017 18:04, Daniel P. Berrange wrote:
On Tue, May 30, 2017 at 05:30:44PM +0300, Vladimir Sementsov-Ogievskiy wrote:
Return QIO_CHANNEL_ERR_EPIPE on EPIPE, we will need it to improve error
path in nbd server.

Signed-off-by: Vladimir Sementsov-Ogievskiy <address@hidden>
---
  include/io/channel.h | 1 +
  io/channel-socket.c  | 2 +-
  2 files changed, 2 insertions(+), 1 deletion(-)

diff --git a/include/io/channel.h b/include/io/channel.h
index 5d48906998..5529c2da31 100644
--- a/include/io/channel.h
+++ b/include/io/channel.h
@@ -38,6 +38,7 @@ typedef struct QIOChannel QIOChannel;
  typedef struct QIOChannelClass QIOChannelClass;
#define QIO_CHANNEL_ERR_BLOCK -2
+#define QIO_CHANNEL_ERR_EPIPE -3
typedef enum QIOChannelFeature QIOChannelFeature; diff --git a/io/channel-socket.c b/io/channel-socket.c
index 53386b7ba3..50f9f966c6 100644
--- a/io/channel-socket.c
+++ b/io/channel-socket.c
@@ -542,7 +542,7 @@ static ssize_t qio_channel_socket_writev(QIOChannel *ioc,
          }
          error_setg_errno(errp, errno,
                           "Unable to write to socket");
-        return -1;
+        return errno == EPIPE ? QIO_CHANNEL_ERR_EPIPE : -1;
      }
      return ret;
Ewwww, no. We don't want to go down the road of special casing
further errno values for every error scenario.

I need to distinguish client socket closed without reading nbd server reply from other errors, because this is a valid behavior accordingly to the protocol. Any way to do this? Hmm, I can examine the contents of errp, of course, but I'm afraid it would be even less appropriate. This is funny: user has this information in errp message, but the code - doesn't..

Alternatively:
1. not report errors on sending reply after OPT_ABORT at all
2. report all errors, (including this EPIPE, which actually is not a failure)

Paolo, what do you think?

(current behavior is (1))


Regards,
Daniel


--
Best regards,
Vladimir



reply via email to

[Prev in Thread] Current Thread [Next in Thread]