diff options
author | Ian Campbell <ian.campbell@citrix.com> | 2011-09-28 16:42:11 +0100 |
---|---|---|
committer | Ian Campbell <ian.campbell@citrix.com> | 2011-09-28 16:42:11 +0100 |
commit | 2c76a4f11bbe8a38c685ae79f4bd384284f47db9 (patch) | |
tree | f6cdfd0dce74af9966b0ba94d9266bbb6cd2e62f /tools/libxl/libxl_blktap2.c | |
parent | 6dac205d0453e0b92e6d8b736bd4805da06e3123 (diff) | |
download | xen-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.c | 36 |
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); +} |