conf: Allow error reporting in virDomainDiskSourceIsBlockType

Rather than provide a somewhat generic error message when the API
returns false, allow the caller to supply a "report = true" option
in order to cause virReportError's to describe which of the 3 paths
that can cause failure.

Some callers don't care about what caused the failure, they just want
to have a true/false - for those, calling with report = false should
be sufficient.
This commit is contained in:
John Ferlan 2015-07-18 07:34:34 -04:00
parent 4ae72f131b
commit 36025c552c
6 changed files with 26 additions and 16 deletions

View File

@ -23995,10 +23995,16 @@ virDomainDefFindDevice(virDomainDefPtr def,
* 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;
@ -24014,11 +24020,20 @@ virDomainDiskSourceIsBlockType(virStorageSourcePtr src)
* (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;
}

View File

@ -3128,7 +3128,7 @@ int virDomainDefFindDevice(virDomainDefPtr def,
virDomainDeviceDefPtr dev,
bool reportError);
bool virDomainDiskSourceIsBlockType(virStorageSourcePtr src)
bool virDomainDiskSourceIsBlockType(virStorageSourcePtr src, bool report)
ATTRIBUTE_NONNULL(1);
void virDomainChrSourceDefClear(virDomainChrSourceDefPtr def);

View File

@ -382,7 +382,7 @@ static int virLXCCgroupSetupDeviceACL(virDomainDefPtr 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,

View File

@ -4069,11 +4069,9 @@ lxcDomainAttachDeviceDiskLive(virLXCDriverPtr driver,
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",

View File

@ -3476,10 +3476,7 @@ qemuCheckDiskConfig(virDomainDiskDefPtr disk)
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) {

View File

@ -1210,7 +1210,7 @@ qemuAddSharedDisk(virQEMUDriverPtr 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);
@ -1355,7 +1355,7 @@ qemuRemoveSharedDisk(virQEMUDriverPtr 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);
@ -1443,7 +1443,7 @@ qemuSetUnprivSGIO(virDomainDeviceDefPtr dev)
disk = dev->data.disk;
if (disk->device != VIR_DOMAIN_DISK_DEVICE_LUN ||
!virDomainDiskSourceIsBlockType(disk->src))
!virDomainDiskSourceIsBlockType(disk->src, false))
return 0;
path = virDomainDiskGetSource(disk);