Stefano Stabellini
2011-Feb-17  15:35 UTC
[Xen-devel] [PATCH] libxl: remove the entries from xenstore when destroying a disk
Currently we are only changing the backend state but it is not enough to
entirely destroying a disk device: remove all the entries from xenstore
as well.
Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
diff -r 2aeb23804ed7 tools/libxl/libxl.c
--- a/tools/libxl/libxl.c	Wed Feb 16 20:51:08 2011 +0000
+++ b/tools/libxl/libxl.c	Thu Feb 17 12:19:17 2011 +0000
@@ -1038,8 +1038,9 @@ int libxl_device_disk_del(libxl_ctx *ctx
 int libxl_device_disk_del(libxl_ctx *ctx, 
                           libxl_device_disk *disk, int wait)
 {
+    libxl__gc gc = LIBXL_INIT_GC(ctx);
     libxl__device device;
-    int devid;
+    int devid, rc;
 
     devid = libxl__device_disk_dev_number(disk->vdev);
     device.backend_domid    = disk->backend_domid;
@@ -1049,7 +1050,11 @@ int libxl_device_disk_del(libxl_ctx *ctx
     device.domid            = disk->domid;
     device.devid            = devid;
     device.kind             = DEVICE_VBD;
-    return libxl__device_del(ctx, &device, wait);
+    rc = libxl__device_del(ctx, &device, wait);
+    xs_rm(ctx->xsh, XBT_NULL, libxl__device_backend_path(&gc,
&device));
+    xs_rm(ctx->xsh, XBT_NULL, libxl__device_frontend_path(&gc,
&device));
+    libxl__free_all(&gc);
+    return rc;
 }
 
 char * libxl_device_disk_local_attach(libxl_ctx *ctx, libxl_device_disk *disk)
diff -r 2aeb23804ed7 tools/libxl/libxl_device.c
--- a/tools/libxl/libxl_device.c	Wed Feb 16 20:51:08 2011 +0000
+++ b/tools/libxl/libxl_device.c	Thu Feb 17 12:19:17 2011 +0000
@@ -40,7 +40,7 @@ static const char *string_of_kinds[] = {
     [DEVICE_CONSOLE] = "console",
 };
 
-static char *libxl__device_frontend_path(libxl__gc *gc, libxl__device *device)
+char *libxl__device_frontend_path(libxl__gc *gc, libxl__device *device)
 {
     char *dom_path = libxl__xs_get_dompath(gc, device->domid);
 
@@ -52,7 +52,7 @@ static char *libxl__device_frontend_path
                           string_of_kinds[device->kind], device->devid);
 }
 
-static char *libxl__device_backend_path(libxl__gc *gc, libxl__device *device)
+char *libxl__device_backend_path(libxl__gc *gc, libxl__device *device)
 {
     char *dom_path = libxl__xs_get_dompath(gc, device->backend_domid);
 
diff -r 2aeb23804ed7 tools/libxl/libxl_internal.h
--- a/tools/libxl/libxl_internal.h	Wed Feb 16 20:51:08 2011 +0000
+++ b/tools/libxl/libxl_internal.h	Thu Feb 17 12:19:17 2011 +0000
@@ -186,6 +186,8 @@ _hidden int libxl__device_disk_dev_numbe
 
 _hidden int libxl__device_generic_add(libxl_ctx *ctx, libxl__device *device,
                              char **bents, char **fents);
+_hidden char *libxl__device_backend_path(libxl__gc *gc, libxl__device *device);
+_hidden char *libxl__device_frontend_path(libxl__gc *gc, libxl__device
*device);
 _hidden int libxl__device_del(libxl_ctx *ctx, libxl__device *dev, int wait);
 _hidden int libxl__device_destroy(libxl_ctx *ctx, char *be_path, int force);
 _hidden int libxl__devices_destroy(libxl_ctx *ctx, uint32_t domid, int force);
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel
Ian Jackson
2011-Feb-17  19:50 UTC
Re: [Xen-devel] [PATCH] libxl: remove the entries from xenstore when destroying a disk
Stefano Stabellini writes ("[Xen-devel] [PATCH] libxl: remove the entries
from xenstore when destroying a disk"):> Currently we are only changing the backend state but it is not enough to
> entirely destroying a disk device: remove all the entries from xenstore
> as well.
Applied, thanks.
Ian.
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel