static bool
-qemuDomainDiskBlockIoTuneIsSupported(virStorageSource *src)
+qemuDomainDiskBlockIoTuneIsSupported(virDomainDiskDef *disk)
{
- if (virStorageSourceGetActualType(src) == VIR_STORAGE_TYPE_VHOST_USER) {
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
- _("a block I/O throttling is not supported for vhostuser disk"));
+ if (virStorageSourceGetActualType(disk->src) == VIR_STORAGE_TYPE_VHOST_USER ||
+ disk->bus == VIR_DOMAIN_DISK_BUS_SD) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+ _("block I/O throttling is not supported for disk '%1$s'"), disk->dst);
return false;
}
if (!(disk = qemuDomainDiskByName(def, path)))
goto endjob;
- if (!qemuDomainDiskBlockIoTuneIsSupported(disk->src))
+ if (!qemuDomainDiskBlockIoTuneIsSupported(disk))
goto endjob;
if (QEMU_DOMAIN_DISK_PRIVATE(disk)->qomName) {
goto endjob;
}
- if (!qemuDomainDiskBlockIoTuneIsSupported(conf_disk->src))
+ if (!qemuDomainDiskBlockIoTuneIsSupported(conf_disk))
goto endjob;
conf_cur_info = qemuDomainFindGroupBlockIoTune(persistentDef, conf_disk, &info);
if (!(disk = qemuDomainDiskByName(def, path)))
goto endjob;
- if (!qemuDomainDiskBlockIoTuneIsSupported(disk->src))
+ if (!qemuDomainDiskBlockIoTuneIsSupported(disk))
goto endjob;
if (QEMU_DOMAIN_DISK_PRIVATE(disk)->qomName) {
goto endjob;
}
- if (!qemuDomainDiskBlockIoTuneIsSupported(disk->src))
+ if (!qemuDomainDiskBlockIoTuneIsSupported(disk))
goto endjob;
reply = disk->blkdeviotune;
return -1;
}
+ /* setting throttling for the SD card didn't work, refuse it explicitly */
+ if (disk->bus == VIR_DOMAIN_DISK_BUS_SD &&
+ qemuDiskConfigBlkdeviotuneEnabled(disk)) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ _("<iotune> is not supported with bus='sd'"));
+ return -1;
+ }
+
/* checking def here is only for calling from tests */
if (disk->blkdeviotune.group_name) {
size_t i;