aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefano Stabellini <stefano.stabellini@eu.citrix.com>2011-02-17 19:50:44 +0000
committerStefano Stabellini <stefano.stabellini@eu.citrix.com>2011-02-17 19:50:44 +0000
commit0cfffb1f9ebea14a17761700690d85f118823644 (patch)
tree0794f98939ae2a4bc0a316b3e47c510e1e2329df
parent7b289f9e42acbea5058fe5ce916affcdfabc4e66 (diff)
downloadxen-0cfffb1f9ebea14a17761700690d85f118823644.tar.gz
xen-0cfffb1f9ebea14a17761700690d85f118823644.tar.bz2
xen-0cfffb1f9ebea14a17761700690d85f118823644.zip
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> Committed-by: Ian Jackson <ian.jackson@eu.citrix.com>
-rw-r--r--tools/libxl/libxl.c9
-rw-r--r--tools/libxl/libxl_device.c4
-rw-r--r--tools/libxl/libxl_internal.h2
3 files changed, 11 insertions, 4 deletions
diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c
index 5484c5c0c7..0171699a7f 100644
--- a/tools/libxl/libxl.c
+++ b/tools/libxl/libxl.c
@@ -1038,8 +1038,9 @@ out:
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 --git a/tools/libxl/libxl_device.c b/tools/libxl/libxl_device.c
index 10efa3f3d4..01d15650d4 100644
--- a/tools/libxl/libxl_device.c
+++ b/tools/libxl/libxl_device.c
@@ -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(libxl__gc *gc, libxl__device *device)
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 --git a/tools/libxl/libxl_internal.h b/tools/libxl/libxl_internal.h
index 26dffcf717..bc6dfa7d49 100644
--- a/tools/libxl/libxl_internal.h
+++ b/tools/libxl/libxl_internal.h
@@ -186,6 +186,8 @@ _hidden int libxl__device_disk_dev_number(char *virtpath);
_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);