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 :|
next prev parent 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 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).