mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-22 19:32:19 +00:00
libxl: set default disk format in device post-parse
When starting a domian, a libxl_domain_config object is created from virDomainDef. Any virDomainDiskDef devices with a format of VIR_STORAGE_FILE_NONE are mapped to LIBXL_DISK_FORMAT_RAW in the corresponding libxl_disk_device, but the virDomainDiskDef format is never updated to reflect the change. A better place to set a default format for disk devices is the device post-parse callback, ensuring the virDomainDiskDef object reflects the default format.
This commit is contained in:
parent
c012052077
commit
321a28c6ae
@ -765,8 +765,6 @@ libxlMakeDisk(virDomainDiskDefPtr l_disk, libxl_device_disk *x_disk)
|
||||
x_disk->format = LIBXL_DISK_FORMAT_VHD;
|
||||
x_disk->backend = LIBXL_DISK_BACKEND_TAP;
|
||||
break;
|
||||
case VIR_STORAGE_FILE_NONE:
|
||||
/* No subtype specified, default to raw/tap */
|
||||
case VIR_STORAGE_FILE_RAW:
|
||||
x_disk->format = LIBXL_DISK_FORMAT_RAW;
|
||||
x_disk->backend = LIBXL_DISK_BACKEND_TAP;
|
||||
@ -802,8 +800,6 @@ libxlMakeDisk(virDomainDiskDefPtr l_disk, libxl_device_disk *x_disk)
|
||||
case VIR_STORAGE_FILE_VHD:
|
||||
x_disk->format = LIBXL_DISK_FORMAT_VHD;
|
||||
break;
|
||||
case VIR_STORAGE_FILE_NONE:
|
||||
/* No subtype specified, default to raw */
|
||||
case VIR_STORAGE_FILE_RAW:
|
||||
x_disk->format = LIBXL_DISK_FORMAT_RAW;
|
||||
break;
|
||||
@ -816,8 +812,7 @@ libxlMakeDisk(virDomainDiskDefPtr l_disk, libxl_device_disk *x_disk)
|
||||
return -1;
|
||||
}
|
||||
} else if (STREQ(driver, "file")) {
|
||||
if (format != VIR_STORAGE_FILE_NONE &&
|
||||
format != VIR_STORAGE_FILE_RAW) {
|
||||
if (format != VIR_STORAGE_FILE_RAW) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
_("libxenlight does not support disk format %s "
|
||||
"with disk driver %s"),
|
||||
@ -828,8 +823,7 @@ libxlMakeDisk(virDomainDiskDefPtr l_disk, libxl_device_disk *x_disk)
|
||||
x_disk->format = LIBXL_DISK_FORMAT_RAW;
|
||||
x_disk->backend = LIBXL_DISK_BACKEND_QDISK;
|
||||
} else if (STREQ(driver, "phy")) {
|
||||
if (format != VIR_STORAGE_FILE_NONE &&
|
||||
format != VIR_STORAGE_FILE_RAW) {
|
||||
if (format != VIR_STORAGE_FILE_RAW) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
_("libxenlight does not support disk format %s "
|
||||
"with disk driver %s"),
|
||||
|
@ -362,16 +362,21 @@ libxlDomainDeviceDefPostParse(virDomainDeviceDefPtr dev,
|
||||
}
|
||||
}
|
||||
|
||||
/* for network-based disks, set 'qemu' as the default driver */
|
||||
if (dev->type == VIR_DOMAIN_DEVICE_DISK) {
|
||||
virDomainDiskDefPtr disk = dev->data.disk;
|
||||
int actual_type = virStorageSourceGetActualType(disk->src);
|
||||
int format = virDomainDiskGetFormat(disk);
|
||||
|
||||
/* for network-based disks, set 'qemu' as the default driver */
|
||||
if (actual_type == VIR_STORAGE_TYPE_NETWORK) {
|
||||
if (!virDomainDiskGetDriver(disk) &&
|
||||
virDomainDiskSetDriver(disk, "qemu") < 0)
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* xl.cfg default format is raw. See xl-disk-configuration(5) */
|
||||
if (format == VIR_STORAGE_FILE_NONE)
|
||||
virDomainDiskSetFormat(disk, VIR_STORAGE_FILE_RAW);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
@ -5468,8 +5468,7 @@ libxlDomainBlockStatsGatherSingle(virDomainObjPtr vm,
|
||||
disk_drv = "qemu";
|
||||
|
||||
if (STREQ(disk_drv, "phy")) {
|
||||
if (disk_fmt != VIR_STORAGE_FILE_RAW &&
|
||||
disk_fmt != VIR_STORAGE_FILE_NONE) {
|
||||
if (disk_fmt != VIR_STORAGE_FILE_RAW) {
|
||||
virReportError(VIR_ERR_OPERATION_UNSUPPORTED,
|
||||
_("unsupported format %s"),
|
||||
virStorageFileFormatTypeToString(disk_fmt));
|
||||
|
Loading…
x
Reference in New Issue
Block a user