1
0
mirror of https://gitlab.com/libvirt/libvirt.git synced 2025-03-07 17:28:15 +00:00

qemu: refactor qemuDomainCheckDiskPresence for only disk presence check

Refactor this function to make it focus on disk presence checking,
including diskchain checking, and not only for CDROM and Floppy.
This change is good for the following patches.
This commit is contained in:
Guannan Ren 2013-07-26 20:37:21 +08:00
parent 6f4a0ebe8c
commit e2ccc96cf0

View File

@ -2026,34 +2026,19 @@ cleanup:
virObjectUnref(cfg);
}
int
qemuDomainCheckDiskPresence(virQEMUDriverPtr driver,
static int
qemuDomainCheckDiskStartupPolicy(virQEMUDriverPtr driver,
virDomainObjPtr vm,
virDomainDiskDefPtr disk,
bool cold_boot)
{
int ret = -1;
size_t i;
virDomainDiskDefPtr disk;
char uuid[VIR_UUID_STRING_BUFLEN];
virDomainEventPtr event = NULL;
virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
int startupPolicy = disk->startupPolicy;
virUUIDFormat(vm->def->uuid, uuid);
for (i = 0; i < vm->def->ndisks; i++) {
disk = vm->def->disks[i];
if (!disk->startupPolicy || !disk->src)
continue;
if (virFileAccessibleAs(disk->src, F_OK,
cfg->user,
cfg->group) >= 0) {
/* disk accessible */
continue;
}
switch ((enum virDomainStartupPolicy) disk->startupPolicy) {
switch ((enum virDomainStartupPolicy) startupPolicy) {
case VIR_DOMAIN_STARTUP_POLICY_OPTIONAL:
break;
@ -2061,7 +2046,7 @@ qemuDomainCheckDiskPresence(virQEMUDriverPtr driver,
virReportSystemError(errno,
_("cannot access file '%s'"),
disk->src);
goto cleanup;
goto error;
break;
case VIR_DOMAIN_STARTUP_POLICY_REQUISITE:
@ -2069,7 +2054,7 @@ qemuDomainCheckDiskPresence(virQEMUDriverPtr driver,
virReportSystemError(errno,
_("cannot access file '%s'"),
disk->src);
goto cleanup;
goto error;
}
break;
@ -2089,6 +2074,39 @@ qemuDomainCheckDiskPresence(virQEMUDriverPtr driver,
qemuDomainEventQueue(driver, event);
VIR_FREE(disk->src);
return 0;
error:
return -1;
}
int
qemuDomainCheckDiskPresence(virQEMUDriverPtr driver,
virDomainObjPtr vm,
bool cold_boot)
{
int ret = -1;
size_t i;
virDomainDiskDefPtr disk;
virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
for (i = 0; i < vm->def->ndisks; i++) {
disk = vm->def->disks[i];
if (!disk->startupPolicy || !disk->src)
continue;
if (virFileAccessibleAs(disk->src, F_OK,
cfg->user,
cfg->group) >= 0) {
/* disk accessible */
continue;
}
if (qemuDomainCheckDiskStartupPolicy(driver, vm, disk,
cold_boot) < 0)
goto cleanup;
}
ret = 0;