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:
parent
6f4a0ebe8c
commit
e2ccc96cf0
@ -2026,34 +2026,19 @@ cleanup:
|
|||||||
virObjectUnref(cfg);
|
virObjectUnref(cfg);
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
static int
|
||||||
qemuDomainCheckDiskPresence(virQEMUDriverPtr driver,
|
qemuDomainCheckDiskStartupPolicy(virQEMUDriverPtr driver,
|
||||||
virDomainObjPtr vm,
|
virDomainObjPtr vm,
|
||||||
|
virDomainDiskDefPtr disk,
|
||||||
bool cold_boot)
|
bool cold_boot)
|
||||||
{
|
{
|
||||||
int ret = -1;
|
|
||||||
size_t i;
|
|
||||||
virDomainDiskDefPtr disk;
|
|
||||||
char uuid[VIR_UUID_STRING_BUFLEN];
|
char uuid[VIR_UUID_STRING_BUFLEN];
|
||||||
virDomainEventPtr event = NULL;
|
virDomainEventPtr event = NULL;
|
||||||
virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
|
int startupPolicy = disk->startupPolicy;
|
||||||
|
|
||||||
virUUIDFormat(vm->def->uuid, uuid);
|
virUUIDFormat(vm->def->uuid, uuid);
|
||||||
|
|
||||||
for (i = 0; i < vm->def->ndisks; i++) {
|
switch ((enum virDomainStartupPolicy) startupPolicy) {
|
||||||
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) {
|
|
||||||
case VIR_DOMAIN_STARTUP_POLICY_OPTIONAL:
|
case VIR_DOMAIN_STARTUP_POLICY_OPTIONAL:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -2061,7 +2046,7 @@ qemuDomainCheckDiskPresence(virQEMUDriverPtr driver,
|
|||||||
virReportSystemError(errno,
|
virReportSystemError(errno,
|
||||||
_("cannot access file '%s'"),
|
_("cannot access file '%s'"),
|
||||||
disk->src);
|
disk->src);
|
||||||
goto cleanup;
|
goto error;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case VIR_DOMAIN_STARTUP_POLICY_REQUISITE:
|
case VIR_DOMAIN_STARTUP_POLICY_REQUISITE:
|
||||||
@ -2069,7 +2054,7 @@ qemuDomainCheckDiskPresence(virQEMUDriverPtr driver,
|
|||||||
virReportSystemError(errno,
|
virReportSystemError(errno,
|
||||||
_("cannot access file '%s'"),
|
_("cannot access file '%s'"),
|
||||||
disk->src);
|
disk->src);
|
||||||
goto cleanup;
|
goto error;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -2089,6 +2074,39 @@ qemuDomainCheckDiskPresence(virQEMUDriverPtr driver,
|
|||||||
qemuDomainEventQueue(driver, event);
|
qemuDomainEventQueue(driver, event);
|
||||||
|
|
||||||
VIR_FREE(disk->src);
|
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;
|
ret = 0;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user