/*
* libxl_conf.c: libxl configuration management
*
- * Copyright (C) 2012 Red Hat, Inc.
+ * Copyright (C) 2012-2014 Red Hat, Inc.
* Copyright (c) 2011-2013 SUSE LINUX Products GmbH, Nuernberg, Germany.
* Copyright (C) 2011 Univention GmbH.
*
int
libxlMakeDisk(virDomainDiskDefPtr l_disk, libxl_device_disk *x_disk)
{
+ const char *driver;
+ int format;
+
libxl_device_disk_init(x_disk);
- if (VIR_STRDUP(x_disk->pdev_path, l_disk->src) < 0)
+ if (VIR_STRDUP(x_disk->pdev_path, virDomainDiskGetSource(l_disk)) < 0)
return -1;
if (VIR_STRDUP(x_disk->vdev, l_disk->dst) < 0)
return -1;
- if (l_disk->driverName) {
- if (STREQ(l_disk->driverName, "tap") ||
- STREQ(l_disk->driverName, "tap2")) {
- switch (l_disk->format) {
+ driver = virDomainDiskGetDriver(l_disk);
+ format = virDomainDiskGetFormat(l_disk);
+ if (driver) {
+ if (STREQ(driver, "tap") || STREQ(driver, "tap2")) {
+ switch (format) {
case VIR_STORAGE_FILE_QCOW:
x_disk->format = LIBXL_DISK_FORMAT_QCOW;
x_disk->backend = LIBXL_DISK_BACKEND_QDISK;
virReportError(VIR_ERR_INTERNAL_ERROR,
_("libxenlight does not support disk format %s "
"with disk driver %s"),
- virStorageFileFormatTypeToString(l_disk->format),
- l_disk->driverName);
+ virStorageFileFormatTypeToString(format),
+ driver);
return -1;
}
- } else if (STREQ(l_disk->driverName, "qemu")) {
+ } else if (STREQ(driver, "qemu")) {
x_disk->backend = LIBXL_DISK_BACKEND_QDISK;
- switch (l_disk->format) {
+ switch (format) {
case VIR_STORAGE_FILE_QCOW:
x_disk->format = LIBXL_DISK_FORMAT_QCOW;
break;
virReportError(VIR_ERR_INTERNAL_ERROR,
_("libxenlight does not support disk format %s "
"with disk driver %s"),
- virStorageFileFormatTypeToString(l_disk->format),
- l_disk->driverName);
+ virStorageFileFormatTypeToString(format),
+ driver);
return -1;
}
- } else if (STREQ(l_disk->driverName, "file")) {
- if (l_disk->format != VIR_STORAGE_FILE_NONE &&
- l_disk->format != VIR_STORAGE_FILE_RAW) {
+ } else if (STREQ(driver, "file")) {
+ if (format != VIR_STORAGE_FILE_NONE &&
+ format != VIR_STORAGE_FILE_RAW) {
virReportError(VIR_ERR_INTERNAL_ERROR,
_("libxenlight does not support disk format %s "
"with disk driver %s"),
- virStorageFileFormatTypeToString(l_disk->format),
- l_disk->driverName);
+ virStorageFileFormatTypeToString(format),
+ driver);
return -1;
}
x_disk->format = LIBXL_DISK_FORMAT_RAW;
x_disk->backend = LIBXL_DISK_BACKEND_TAP;
- } else if (STREQ(l_disk->driverName, "phy")) {
- if (l_disk->format != VIR_STORAGE_FILE_NONE &&
- l_disk->format != VIR_STORAGE_FILE_RAW) {
+ } else if (STREQ(driver, "phy")) {
+ if (format != VIR_STORAGE_FILE_NONE &&
+ format != VIR_STORAGE_FILE_RAW) {
virReportError(VIR_ERR_INTERNAL_ERROR,
_("libxenlight does not support disk format %s "
"with disk driver %s"),
- virStorageFileFormatTypeToString(l_disk->format),
- l_disk->driverName);
+ virStorageFileFormatTypeToString(format),
+ driver);
return -1;
}
x_disk->format = LIBXL_DISK_FORMAT_RAW;
} else {
virReportError(VIR_ERR_INTERNAL_ERROR,
_("libxenlight does not support disk driver %s"),
- l_disk->driverName);
+ driver);
return -1;
}
} else {
goto cleanup;
}
- VIR_FREE(origdisk->src);
- origdisk->src = disk->src;
- disk->src = NULL;
- origdisk->type = disk->type;
-
+ if (virDomainDiskSetSource(origdisk, virDomainDiskGetSource(disk)) < 0)
+ goto cleanup;
+ virDomainDiskSetType(origdisk, virDomainDiskGetType(disk));
virDomainDiskDefFree(disk);
goto cleanup;
}
- if (!l_disk->src) {
+ if (!virDomainDiskGetSource(l_disk)) {
virReportError(VIR_ERR_INTERNAL_ERROR,
"%s", _("disk source path is missing"));
goto cleanup;
goto cleanup;
}
- VIR_FREE(orig->src);
- orig->src = disk->src;
- orig->type = disk->type;
- if (disk->driverName) {
- VIR_FREE(orig->driverName);
- orig->driverName = disk->driverName;
- disk->driverName = NULL;
- }
- orig->format = disk->format;
- disk->src = NULL;
+ if (virDomainDiskSetSource(orig, virDomainDiskGetSource(disk)) < 0)
+ goto cleanup;
+ virDomainDiskSetType(orig, virDomainDiskGetType(disk));
+ virDomainDiskSetFormat(orig, virDomainDiskGetFormat(disk));
+ if (virDomainDiskSetDriver(orig, virDomainDiskGetDriver(disk)) < 0)
+ goto cleanup;
break;
default:
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",