* Return true if its source is block type, or false otherwise.
*/
bool
-virDomainDiskSourceIsBlockType(virStorageSourcePtr src)
+virDomainDiskSourceIsBlockType(virStorageSourcePtr src,
+ bool report)
{
- if (!src->path)
+ if (!src->path) {
+ if (report)
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+ _("source path not found for device='lun' "
+ "using type='%d'"), src->type);
return false;
+ }
if (src->type == VIR_STORAGE_TYPE_BLOCK)
return true;
* (e.g. set sgio=filtered|unfiltered for it) in libvirt.
*/
if (src->srcpool->pooltype == VIR_STORAGE_POOL_ISCSI &&
- src->srcpool->mode == VIR_STORAGE_SOURCE_POOL_MODE_DIRECT)
+ src->srcpool->mode == VIR_STORAGE_SOURCE_POOL_MODE_DIRECT) {
+ if (report)
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ _("disk device='lun' for iSCSI is not "
+ "supported with mode='direct'."));
return false;
+ }
return true;
}
+ if (report)
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ _("disk device='lun' is only valid for block "
+ "type disk source"));
return false;
}
virDomainDeviceDefPtr dev,
bool reportError);
-bool virDomainDiskSourceIsBlockType(virStorageSourcePtr src)
+bool virDomainDiskSourceIsBlockType(virStorageSourcePtr src, bool report)
ATTRIBUTE_NONNULL(1);
void virDomainChrSourceDefClear(virDomainChrSourceDefPtr def);
VIR_DEBUG("Allowing any disk block devs");
for (i = 0; i < def->ndisks; i++) {
- if (!virDomainDiskSourceIsBlockType(def->disks[i]->src))
+ if (!virDomainDiskSourceIsBlockType(def->disks[i]->src, false))
continue;
if (virCgroupAllowDevicePath(cgroup,
goto cleanup;
}
- if (!virDomainDiskSourceIsBlockType(def->src)) {
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
- _("Can't setup disk for non-block device"));
+ if (!virDomainDiskSourceIsBlockType(def->src, true))
goto cleanup;
- }
+
src = virDomainDiskGetSource(def);
if (src == NULL) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
virStorageNetProtocolTypeToString(disk->src->protocol));
goto error;
}
- } else if (!virDomainDiskSourceIsBlockType(disk->src)) {
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
- _("disk device='lun' is only valid for block "
- "type disk source"));
+ } else if (!virDomainDiskSourceIsBlockType(disk->src, true)) {
goto error;
}
if (disk->wwn) {
char *key = NULL;
int ret = -1;
- if (!disk->src->shared || !virDomainDiskSourceIsBlockType(disk->src))
+ if (!disk->src->shared || !virDomainDiskSourceIsBlockType(disk->src, false))
return 0;
qemuDriverLock(driver);
char *key = NULL;
int ret = -1;
- if (!disk->src->shared || !virDomainDiskSourceIsBlockType(disk->src))
+ if (!disk->src->shared || !virDomainDiskSourceIsBlockType(disk->src, false))
return 0;
qemuDriverLock(driver);
disk = dev->data.disk;
if (disk->device != VIR_DOMAIN_DISK_DEVICE_LUN ||
- !virDomainDiskSourceIsBlockType(disk->src))
+ !virDomainDiskSourceIsBlockType(disk->src, false))
return 0;
path = virDomainDiskGetSource(disk);