WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

[Xen-devel] Re: [PATCH] libxl: handle the return value of wait_for_dev_d

To: Roger Pau Monne <roger.pau@xxxxxxxxxxxxx>
Subject: [Xen-devel] Re: [PATCH] libxl: handle the return value of wait_for_dev_destroy select and pass it to caller function
From: Ian Campbell <Ian.Campbell@xxxxxxxxxx>
Date: Wed, 19 Oct 2011 12:54:35 +0100
Cc: "xen-devel@xxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxx>
Delivery-date: Wed, 19 Oct 2011 04:55:27 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <5941638b04693f7d8bfa.1319024587@loki>
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Organization: Citrix Systems, Inc.
References: <5941638b04693f7d8bfa.1319024587@loki>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
On Wed, 2011-10-19 at 12:43 +0100, Roger Pau Monne wrote:
> # HG changeset patch
> # User Roger Pau Monne <roger.pau@xxxxxxxxxxxxx>
> # Date 1319024152 -7200
> # Node ID 5941638b04693f7d8bfa2d6b5563132f54942a28
> # Parent  a2a3c4d7333ec15b818b3403f148ad61c254ea82
> libxl: handle the return value of wait_for_dev_destroy select and pass it to 
> caller function.
> 
> Handle the return value of the select call inside wait_for_dev_destroy 
> properly, and return 0 if the device is removed, or 1 if a timeout or error 
> happened. Use the return value of wait_for_dev_destroy inside 
> libxl__device_remove to properly return from that function.
> 
> This patch should be applied after Ian Campbell's v3 "libxl: rationalise 
> libxl_device_* APIs".
> 
> Signed-off-by: Roger Pau Monne <roger.pau@xxxxxxxxxxxxx>
> 
> diff -r a2a3c4d7333e -r 5941638b0469 tools/libxl/libxl_device.c
> --- a/tools/libxl/libxl_device.c      Tue Oct 18 13:36:43 2011 +0100
> +++ b/tools/libxl/libxl_device.c      Wed Oct 19 13:35:52 2011 +0200
> @@ -367,6 +367,7 @@ int libxl__device_disk_dev_number(const 
>      return -1;
>  }
>  
> +/* Returns 0 if a device is removed, 1 if an error or timeout occurred */
>  static int wait_for_dev_destroy(libxl__gc *gc, struct timeval *tv)
>  {
>      libxl_ctx *ctx = libxl__gc_owner(gc);
> @@ -436,7 +449,7 @@ retry_transaction:
>          struct timeval tv;
>          tv.tv_sec = LIBXL_DESTROY_TIMEOUT;
>          tv.tv_usec = 0;
> -        (void)wait_for_dev_destroy(gc, &tv);
> +        rc = wait_for_dev_destroy(gc, &tv);
>          xs_rm(ctx->xsh, XBT_NULL, libxl__device_frontend_path(gc, dev));
>      } else {
>          rc = 1; /* Caller must wait_for_dev_destroy */

If wait_for_dev_destroy returns 1 (error or timeout) then this will get
returned to the caller, where it means "you must wait". But they will
not be expecting this (because they passed wait==1) and even if they
were having them call wait_for_dev_destroy when it has already timed out
doesn't seem likely.

I think the right thing is for wait_for_dev_destroy to return 0 or an
ERROR_* where one of the ERROR_* can be ERROR_TIMEDOUT and for this to
be propagated to the caller.

The caller in libxl__devices_destroy needs to do something with this
return value as well. It would be good to consume all the watches but
return the first error, or something like that.

Ian.


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel

<Prev in Thread] Current Thread [Next in Thread>