All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Daniel P. Berrange" <berrange@redhat.com>
To: Markus Armbruster <armbru@redhat.com>
Cc: Mao Zhongyi <maozy.fnst@cn.fujitsu.com>,
	jasowang@redhat.com, qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH v2 3/4] net/socket: Convert error report message to Error
Date: Thu, 27 Apr 2017 17:30:25 +0100	[thread overview]
Message-ID: <20170427163025.GD30599@redhat.com> (raw)
In-Reply-To: <87shktu8cu.fsf@dusky.pond.sub.org>

On Thu, Apr 27, 2017 at 06:24:17PM +0200, Markus Armbruster wrote:
> No review, just an observation.
> 
> Mao Zhongyi <maozy.fnst@cn.fujitsu.com> writes:
> 
> > Currently, net_socket_mcast_create(), net_socket_fd_init_dgram() and
> > net_socket_fd_init() use the function such as fprintf(), perror() to
> > report an error message.
> >
> > Now, convert these functions to Error.
> >
> > CC: jasowang@redhat.com, armbru@redhat.com
> > Signed-off-by: Mao Zhongyi <maozy.fnst@cn.fujitsu.com>
> > ---
> >  net/socket.c | 66 +++++++++++++++++++++++++++++++++++++-----------------------
> >  1 file changed, 41 insertions(+), 25 deletions(-)
> >
> > diff --git a/net/socket.c b/net/socket.c
> > index b0decbe..559e09a 100644
> > --- a/net/socket.c
> > +++ b/net/socket.c
> [...]
> > @@ -433,25 +437,27 @@ static NetSocketState *net_socket_fd_init_stream(NetClientState *peer,
> >  
> >  static NetSocketState *net_socket_fd_init(NetClientState *peer,
> >                                            const char *model, const char *name,
> > -                                          int fd, int is_connected)
> > +                                          int fd, int is_connected,
> > +                                          Error **errp)
> >  {
> >      int so_type = -1, optlen=sizeof(so_type);
> >  
> >      if(getsockopt(fd, SOL_SOCKET, SO_TYPE, (char *)&so_type,
> >          (socklen_t *)&optlen)< 0) {
> > -        fprintf(stderr, "qemu: error: getsockopt(SO_TYPE) for fd=%d failed\n",
> > +        error_setg(errp, "qemu: error: getsockopt(SO_TYPE) for fd=%d failed",
> >                  fd);
> >          closesocket(fd);
> >          return NULL;
> >      }
> >      switch(so_type) {
> >      case SOCK_DGRAM:
> > -        return net_socket_fd_init_dgram(peer, model, name, fd, is_connected);
> > +        return net_socket_fd_init_dgram(peer, model, name, fd, is_connected, errp);
> >      case SOCK_STREAM:
> >          return net_socket_fd_init_stream(peer, model, name, fd, is_connected);
> >      default:
> >          /* who knows ... this could be a eg. a pty, do warn and continue as stream */
> > -        fprintf(stderr, "qemu: warning: socket type=%d for fd=%d is not SOCK_DGRAM or SOCK_STREAM\n", so_type, fd);
> > +        error_setg(errp, "qemu: warning: socket type=%d for fd=%d is not SOCK_DGRAM"
> > +                   " or SOCK_STREAM", so_type, fd);
> 
> Not this patches problem: this case is odd, and the comment is bogus.
> If @fd really was a pty, getsockopt() would fail with ENOTSOCK, wouldn't
> it?  If @fd is a socket, but neither SOCK_DGRAM nor SOCK_STREAM (say
> SOCK_RAW), why is it safe to continue as if it was SOCK_STREAM?  Jason?

IMHO it is a problem with this patch. Previously we merely printed
a warning & carried on, which is conceptually ok in general, though
dubious here for the reason you say.

Now we are filling an Error **errp object, and carrying on - this is
conceptually broken anywhere. If an Error ** is filled, we must return.
If we want to carry on, we shouldn't fill Error **.

> 
> >          return net_socket_fd_init_stream(peer, model, name, fd, is_connected);

IMHO, we just kill this and put return NULL here. If there is a genuine
reason to support something like SOCK_RAW, it should be explicitly
handled, because this default: case will certainly break SOCK_SEQPACKET
and SOCK_RDM which can't be treated as streams.

> >      }
> >      return NULL;
> 
> Not reachable.  Ugly, but not your patch's concern.


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 :|

  reply	other threads:[~2017-04-27 16:30 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-04-26  8:04 [Qemu-devel] [PATCH v2 0/4] Convert non-blocking connect and fix its error reporting Mao Zhongyi
2017-04-26  8:04 ` [Qemu-devel] [PATCH v2 1/4] net/socket: Convert the non-blocking connection mechanism to QIOchannel Mao Zhongyi
2017-04-27 15:46   ` Markus Armbruster
2017-04-27 16:19     ` Markus Armbruster
2017-04-27 16:22       ` Daniel P. Berrange
2017-05-03  7:02     ` Mao Zhongyi
2017-04-27 16:20   ` Daniel P. Berrange
2017-05-03  7:02     ` Mao Zhongyi
2017-04-26  8:04 ` [Qemu-devel] [PATCH v2 2/4] net/socket: Improve -net socket error reporting Mao Zhongyi
2017-04-27 16:10   ` Markus Armbruster
2017-05-03  7:07     ` Mao Zhongyi
2017-04-26  8:04 ` [Qemu-devel] [PATCH v2 3/4] net/socket: Convert error report message to Error Mao Zhongyi
2017-04-27 16:24   ` Markus Armbruster
2017-04-27 16:30     ` Daniel P. Berrange [this message]
2017-04-28  8:02       ` Markus Armbruster
2017-05-03  7:09         ` Mao Zhongyi
2017-05-03  8:37           ` Daniel P. Berrange
2017-05-03  8:37             ` Mao Zhongyi
2017-05-03  8:54           ` Markus Armbruster
2017-05-03  8:59             ` Mao Zhongyi
2017-05-03 11:47               ` Jason Wang
2017-04-26  8:04 ` [Qemu-devel] [PATCH v2 4/4] net/net: Convert parse_host_port() " Mao Zhongyi
2017-04-27 16:25 ` [Qemu-devel] [PATCH v2 0/4] Convert non-blocking connect and fix its error reporting Markus Armbruster
2017-05-03  7:12   ` Mao Zhongyi
2017-05-05 16:39 ` Daniel P. Berrange
2017-05-09  1:26   ` Mao Zhongyi

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=20170427163025.GD30599@redhat.com \
    --to=berrange@redhat.com \
    --cc=armbru@redhat.com \
    --cc=jasowang@redhat.com \
    --cc=maozy.fnst@cn.fujitsu.com \
    --cc=qemu-devel@nongnu.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: link
Be 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.