aboutsummaryrefslogtreecommitdiffstats
path: root/tools/libxl
diff options
context:
space:
mode:
authorIan Campbell <ian.campbell@citrix.com>2011-04-08 16:39:53 +0100
committerIan Campbell <ian.campbell@citrix.com>2011-04-08 16:39:53 +0100
commitbdd91be4931fce7caea91f9614c12b4ff335f821 (patch)
tree59c502cce5e0cfbc1f59d0d4e2a6f01fbefbb689 /tools/libxl
parent44714d9fb796f13c8854aba9d6fdf1d32cb0432f (diff)
downloadxen-bdd91be4931fce7caea91f9614c12b4ff335f821.tar.gz
xen-bdd91be4931fce7caea91f9614c12b4ff335f821.tar.bz2
xen-bdd91be4931fce7caea91f9614c12b4ff335f821.zip
libxl: refactor DISK_BACKEND_PHY handling in libxl_device_disk_add
A step on the path to sharing this code with the tail-end of the DISK_BACKEND_TAP case. I made the result of libxl__blktap_devpath non-const to achieve this. The existing caller calls libxl__strdup on the result but since the function is an internal one and the result is already garbage collected I think this is unnecessary and we can just use the non-const result directly. Signed-off-by: Ian Campbell <ian.campbell@citrix.com> Committed-by: Ian Jackson <ian.jackson@eu.citrix.com>
Diffstat (limited to 'tools/libxl')
-rw-r--r--tools/libxl/libxl.c48
-rw-r--r--tools/libxl/libxl_blktap2.c6
-rw-r--r--tools/libxl/libxl_internal.h6
-rw-r--r--tools/libxl/libxl_noblktap2.c6
4 files changed, 35 insertions, 31 deletions
diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c
index 80660dccb7..853a612f7f 100644
--- a/tools/libxl/libxl.c
+++ b/tools/libxl/libxl.c
@@ -949,6 +949,7 @@ int libxl_device_disk_add(libxl_ctx *ctx, uint32_t domid, libxl_device_disk *dis
libxl__gc gc = LIBXL_INIT_GC(ctx);
flexarray_t *front;
flexarray_t *back;
+ char *dev;
char *backend_type;
int devid;
libxl__device device;
@@ -997,36 +998,39 @@ int libxl_device_disk_add(libxl_ctx *ctx, uint32_t domid, libxl_device_disk *dis
disk->backend == DISK_BACKEND_QDISK;
switch (disk->backend) {
- case DISK_BACKEND_PHY:
- libxl__device_physdisk_major_minor(disk->pdev_path, &major, &minor);
+ case DISK_BACKEND_PHY:
+ dev = disk->pdev_path;
+
+ libxl__device_physdisk_major_minor(dev, &major, &minor);
flexarray_append(back, "physical-device");
flexarray_append(back, libxl__sprintf(&gc, "%x:%x", major, minor));
flexarray_append(back, "params");
- flexarray_append(back, disk->pdev_path);
+ flexarray_append(back, dev);
device.backend_kind = DEVICE_VBD;
break;
case DISK_BACKEND_TAP:
- {
- const char *dev = libxl__blktap_devpath(&gc,
- disk->pdev_path, disk->format);
- if (!dev) {
- rc = ERROR_FAIL;
- goto out_free;
- }
- flexarray_append(back, "tapdisk-params");
- flexarray_append(back, libxl__sprintf(&gc, "%s:%s",
- libxl__device_disk_string_of_format(disk->format),
- disk->pdev_path));
- flexarray_append(back, "params");
- flexarray_append(back, libxl__strdup(&gc, dev));
- backend_type = "phy";
- libxl__device_physdisk_major_minor(dev, &major, &minor);
- flexarray_append(back, "physical-device");
- flexarray_append(back, libxl__sprintf(&gc, "%x:%x", major, minor));
- device.backend_kind = DEVICE_VBD;
+ dev = libxl__blktap_devpath(&gc, disk->pdev_path, disk->format);
+ if (!dev) {
+ rc = ERROR_FAIL;
+ goto out_free;
}
+ flexarray_append(back, "tapdisk-params");
+ flexarray_append(back, libxl__sprintf(&gc, "%s:%s",
+ libxl__device_disk_string_of_format(disk->format),
+ disk->pdev_path));
+
+ flexarray_append(back, "params");
+ flexarray_append(back, dev);
+
+ backend_type = "phy";
+
+ libxl__device_physdisk_major_minor(dev, &major, &minor);
+ flexarray_append(back, "physical-device");
+ flexarray_append(back, libxl__sprintf(&gc, "%x:%x", major, minor));
+
+ device.backend_kind = DEVICE_VBD;
break;
case DISK_BACKEND_QDISK:
flexarray_append(back, "params");
@@ -1110,7 +1114,7 @@ int libxl_device_disk_del(libxl_ctx *ctx, uint32_t domid,
char * libxl_device_disk_local_attach(libxl_ctx *ctx, libxl_device_disk *disk)
{
libxl__gc gc = LIBXL_INIT_GC(ctx);
- const char *dev = NULL;
+ char *dev = NULL;
char *ret = NULL;
switch (disk->backend) {
diff --git a/tools/libxl/libxl_blktap2.c b/tools/libxl/libxl_blktap2.c
index b238a0a7ca..7c165fcc9a 100644
--- a/tools/libxl/libxl_blktap2.c
+++ b/tools/libxl/libxl_blktap2.c
@@ -24,9 +24,9 @@ int libxl__blktap_enabled(libxl__gc *gc)
return !tap_ctl_check(&msg);
}
-const char *libxl__blktap_devpath(libxl__gc *gc,
- const char *disk,
- libxl_disk_format format)
+char *libxl__blktap_devpath(libxl__gc *gc,
+ const char *disk,
+ libxl_disk_format format)
{
const char *type;
char *params, *devname = NULL;
diff --git a/tools/libxl/libxl_internal.h b/tools/libxl/libxl_internal.h
index 539191e3cc..9fd0f58e08 100644
--- a/tools/libxl/libxl_internal.h
+++ b/tools/libxl/libxl_internal.h
@@ -325,9 +325,9 @@ _hidden int libxl__blktap_enabled(libxl__gc *gc);
* returns device path xenstore wants to have. returns NULL
* if no device corresponds to the disk.
*/
-_hidden const char *libxl__blktap_devpath(libxl__gc *gc,
- const char *disk,
- libxl_disk_format format);
+_hidden char *libxl__blktap_devpath(libxl__gc *gc,
+ const char *disk,
+ libxl_disk_format format);
_hidden char *libxl__uuid2string(libxl__gc *gc, const libxl_uuid uuid);
diff --git a/tools/libxl/libxl_noblktap2.c b/tools/libxl/libxl_noblktap2.c
index 95fee973ed..a66346a286 100644
--- a/tools/libxl/libxl_noblktap2.c
+++ b/tools/libxl/libxl_noblktap2.c
@@ -21,9 +21,9 @@ int libxl__blktap_enabled(libxl__gc *gc)
return 0;
}
-const char *libxl__blktap_devpath(libxl__gc *gc,
- const char *disk,
- libxl_disk_format format)
+char *libxl__blktap_devpath(libxl__gc *gc,
+ const char *disk,
+ libxl_disk_format format)
{
return NULL;
}