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

Reply via email to