aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKamala Narasimhan <kamala.narasimhan@citrix.com>2011-02-15 20:00:33 +0000
committerKamala Narasimhan <kamala.narasimhan@citrix.com>2011-02-15 20:00:33 +0000
commit583d10aea0701501b593710272e97d644089296e (patch)
treee369cca1bec43513a2dc2569ba07818b18fce04c
parent546a7640451fc359212ba23bc2d6a9497e1ed6d9 (diff)
downloadxen-583d10aea0701501b593710272e97d644089296e.tar.gz
xen-583d10aea0701501b593710272e97d644089296e.tar.bz2
xen-583d10aea0701501b593710272e97d644089296e.zip
libxl: disk specification: special case vhd
Special case how we validate vhd image files. Without this patch when tap:aio:vhd prefixed image files are specified in the config file, disk validation and thus vm creation will fail. Signed-off-by: Kamala Narasimhan <kamala.narasimhan@citrix.com> Acked-by: Ian Jackson <ian.jackson@eu.citrix.com> Committed-by: Ian Jackson <ian.jackson@eu.citrix.com>
-rw-r--r--tools/libxl/libxl.c22
1 files changed, 16 insertions, 6 deletions
diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c
index 9fe713976b..990aa8aa24 100644
--- a/tools/libxl/libxl.c
+++ b/tools/libxl/libxl.c
@@ -863,19 +863,30 @@ int libxl_vncviewer_exec(libxl_ctx *ctx, uint32_t domid, int autopass)
/******************************************************************************/
-static int validate_virtual_disk(libxl_ctx *ctx, char *file_name,
- libxl_disk_backend backend_type, libxl_disk_format format)
+static int validate_virtual_disk(libxl_ctx *ctx, char *file_name,
+ libxl_device_disk *disk)
{
struct stat stat_buf;
+ char *delimiter;
- if ((file_name[0] == '\0') && (format == DISK_FORMAT_EMPTY))
+ if (disk->format == DISK_FORMAT_EMPTY)
return 0;
+ if (disk->format == DISK_FORMAT_RAW) {
+ delimiter = strchr(file_name, ':');
+ if (delimiter) {
+ if (!strncmp(file_name, "vhd:", sizeof("vhd:")-1)) {
+ disk->format = DISK_FORMAT_VHD;
+ file_name = ++delimiter;
+ }
+ }
+ }
+
if ( stat(file_name, &stat_buf) != 0 ) {
LIBXL__LOG_ERRNO(ctx, LIBXL__LOG_ERROR, "failed to stat %s", file_name);
return ERROR_INVAL;
}
- if (backend_type == DISK_BACKEND_PHY) {
+ if (disk->backend == DISK_BACKEND_PHY) {
if ( !(S_ISBLK(stat_buf.st_mode)) ) {
LIBXL__LOG(ctx, LIBXL__LOG_ERROR, "Virtual disk %s is not a block device!\n",
file_name);
@@ -899,8 +910,7 @@ int libxl_device_disk_add(libxl_ctx *ctx, uint32_t domid, libxl_device_disk *dis
libxl__device device;
int major, minor, rc;
- rc = validate_virtual_disk(ctx, disk->pdev_path, disk->backend,
- disk->format);
+ rc = validate_virtual_disk(ctx, disk->pdev_path, disk);
if (rc)
return rc;