qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PULL 22/27] nbd: Improve server handling of shutdown r


From: Eric Blake
Subject: Re: [Qemu-devel] [PULL 22/27] nbd: Improve server handling of shutdown requests
Date: Mon, 31 Oct 2016 13:05:09 -0500
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.4.0

On 10/31/2016 09:37 AM, Paolo Bonzini wrote:
> From: Eric Blake <address@hidden>
> 
> NBD commit 6d34500b clarified how clients and servers are supposed
> to behave before closing a connection. It added NBD_REP_ERR_SHUTDOWN
> (for the server to announce it is about to go away during option
> haggling, so the client should quit sending NBD_OPT_* other than
> NBD_OPT_ABORT) and ESHUTDOWN (for the server to announce it is about
> to go away during transmission, so the client should quit sending
> NBD_CMD_* other than NBD_CMD_DISC).  It also clarified that
> NBD_OPT_ABORT gets a reply, while NBD_CMD_DISC does not.
> 
> This patch merely adds the missing reply to NBD_OPT_ABORT and teaches
> the client to recognize server errors.  Actually teaching the server
> to send NBD_REP_ERR_SHUTDOWN or ESHUTDOWN would require knowing that
> the server has been requested to shut down soon (maybe we could do
> that by installing a SIGINT handler in qemu-nbd, which transitions
> from RUNNING to a new state that waits for the client to react,
> rather than just out-right quitting - but that's a bigger task for
> another day).
> 
> Signed-off-by: Eric Blake <address@hidden>
> Message-Id: <address@hidden>
> [Move dummy ESHUTDOWN to include/qemu/osdep.h. - Paolo]
> Signed-off-by: Paolo Bonzini <address@hidden>
> ---

> +++ b/include/qemu/osdep.h
> @@ -128,6 +128,9 @@ extern int daemon(int, int);
>  #if !defined(EMEDIUMTYPE)
>  #define EMEDIUMTYPE 4098
>  #endif
> +#if !defined(ESHUTDOWN)
> +#define ESHUTDOWN 4099
> +#endif

Technically, with this code in place...


> +++ b/nbd/server.c
> @@ -39,6 +39,10 @@ static int system_errno_to_nbd_errno(int err)
>      case EFBIG:
>      case ENOSPC:
>          return NBD_ENOSPC;
> +#ifdef ESHUTDOWN
> +    case ESHUTDOWN:
> +        return NBD_ESHUTDOWN;
> +#endif

...the #ifdef here is pointless.

Can be cleaned up in a followup, so should not stop the pull request.


-- 
Eric Blake   eblake redhat com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org

Attachment: signature.asc
Description: OpenPGP digital signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]