Il 29/11/2013 15:58, Marc-André Lureau ha scritto: > From: Marc-André Lureau <marcandre.lur...@redhat.com> > > The caller might handle non-blocking using coroutine. Leave the choice > to the caller to use a blocking or non-blocking negotiate. > > Signed-off-by: Marc-André Lureau <marcandre.lur...@redhat.com> > --- > nbd.c | 1 - > 1 file changed, 1 deletion(-) > > diff --git a/nbd.c b/nbd.c > index f847940..3af9d17 100644 > --- a/nbd.c > +++ b/nbd.c > @@ -443,7 +443,6 @@ int nbd_receive_negotiate(int csock, const char *name, > uint32_t *flags, > > TRACE("Receiving negotiation."); > > - qemu_set_block(csock); > rc = -EINVAL; > > if (read_sync(csock, buf, 8) != 8) { >
If you remove this here, you need to remove also the matching socket_set_nonblock, Also, there are two callers: - nbd.c: you can add nbd_socket_block/nonblock around nbd_receive_negotiate in nbd_open. - qemu-nbd.c: here the socket can remain in blocking mode. In fact it is blocking before the call to nbd_receive_negotiate, because unix_connect_opts is missing a call to qemu_set_block (bug!). I suggest that you add the call to qemu_set_nonblock there, and add qemu_set_block in nbd_client_thread. Thanks, Paolo