aboutsummaryrefslogtreecommitdiffstats
path: root/tools/libxl/libxl_blktap2.c
diff options
context:
space:
mode:
authorIan Campbell <ian.campbell@citrix.com>2011-09-28 16:42:11 +0100
committerIan Campbell <ian.campbell@citrix.com>2011-09-28 16:42:11 +0100
commit2c76a4f11bbe8a38c685ae79f4bd384284f47db9 (patch)
treef6cdfd0dce74af9966b0ba94d9266bbb6cd2e62f /tools/libxl/libxl_blktap2.c
parent6dac205d0453e0b92e6d8b736bd4805da06e3123 (diff)
downloadxen-2c76a4f11bbe8a38c685ae79f4bd384284f47db9.tar.gz
xen-2c76a4f11bbe8a38c685ae79f4bd384284f47db9.tar.bz2
xen-2c76a4f11bbe8a38c685ae79f4bd384284f47db9.zip
libxl: attempt to cleanup tapdisk processes on disk backend destroy.
Signed-off-by: Ian Campbell <ian.campbell@citrix.com> Committed-by: Ian Jackson <ian.jackson@eu.citrix.com>
Diffstat (limited to 'tools/libxl/libxl_blktap2.c')
-rw-r--r--tools/libxl/libxl_blktap2.c36
1 files changed, 32 insertions, 4 deletions
diff --git a/tools/libxl/libxl_blktap2.c b/tools/libxl/libxl_blktap2.c
index 7c165fcc9a..994f85be03 100644
--- a/tools/libxl/libxl_blktap2.c
+++ b/tools/libxl/libxl_blktap2.c
@@ -18,6 +18,8 @@
#include "tap-ctl.h"
+#include <string.h>
+
int libxl__blktap_enabled(libxl__gc *gc)
{
const char *msg;
@@ -30,12 +32,13 @@ char *libxl__blktap_devpath(libxl__gc *gc,
{
const char *type;
char *params, *devname = NULL;
- int minor, err;
+ tap_list_t tap;
+ int err;
type = libxl__device_disk_string_of_format(format);
- minor = tap_ctl_find_minor(type, disk);
- if (minor >= 0) {
- devname = libxl__sprintf(gc, "/dev/xen/blktap-2/tapdev%d", minor);
+ err = tap_ctl_find(type, disk, &tap);
+ if (err == 0) {
+ devname = libxl__sprintf(gc, "/dev/xen/blktap-2/tapdev%d", tap.minor);
if (devname)
return devname;
}
@@ -49,3 +52,28 @@ char *libxl__blktap_devpath(libxl__gc *gc,
return NULL;
}
+
+
+void libxl__device_destroy_tapdisk(libxl__gc *gc, char *be_path)
+{
+ char *path, *params, *type, *disk;
+ int err;
+ tap_list_t tap;
+
+ path = libxl__sprintf(gc, "%s/tapdisk-params", be_path);
+ if (!path) return;
+
+ params = libxl__xs_read(gc, XBT_NULL, path);
+ if (!params) return;
+
+ type = params;
+ disk = strchr(params, ':');
+ if (!disk) return;
+
+ *disk++ = '\0';
+
+ err = tap_ctl_find(type, disk, &tap);
+ if (err < 0) return;
+
+ tap_ctl_destroy(tap.id, tap.minor);
+}