diff mbox

[09/13] nbd: don't change socket block during negotiate

Message ID 1385737124-13964-10-git-send-email-marcandre.lureau@gmail.com
State New
Headers show

Commit Message

Marc-André Lureau Nov. 29, 2013, 2:58 p.m. UTC
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(-)

Comments

Paolo Bonzini Nov. 29, 2013, 3:22 p.m. UTC | #1
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 mbox

Patch

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) {