Message ID | 1385737124-13964-10-git-send-email-marcandre.lureau@gmail.com |
---|---|
State | New |
Headers | show |
Il 29/11/2013 15:58, Marc-André Lureau ha scritto: > From: Marc-André Lureau <marcandre.lureau@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.lureau@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
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) {