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] [PATCH] libxl: remove the entries from xenstore when destroy

To: xen-devel@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-devel] [PATCH] libxl: remove the entries from xenstore when destroying a disk
From: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx>
Date: Thu, 17 Feb 2011 15:35:45 +0000
Delivery-date: Thu, 17 Feb 2011 07:36:33 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
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>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Alpine 2.00 (DEB 1167 2008-08-23)
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@xxxxxxxxxxxxx>

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@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel

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