diff options
author | Ian Campbell <ian.campbell@citrix.com> | 2011-04-08 16:39:53 +0100 |
---|---|---|
committer | Ian Campbell <ian.campbell@citrix.com> | 2011-04-08 16:39:53 +0100 |
commit | bdd91be4931fce7caea91f9614c12b4ff335f821 (patch) | |
tree | 59c502cce5e0cfbc1f59d0d4e2a6f01fbefbb689 /tools/libxl | |
parent | 44714d9fb796f13c8854aba9d6fdf1d32cb0432f (diff) | |
download | xen-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.c | 48 | ||||
-rw-r--r-- | tools/libxl/libxl_blktap2.c | 6 | ||||
-rw-r--r-- | tools/libxl/libxl_internal.h | 6 | ||||
-rw-r--r-- | tools/libxl/libxl_noblktap2.c | 6 |
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; } |