mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-08 04:31:33 +00:00
qemu: domain: Refactor cleanup in qemuDomainDetermineDiskChain
Use VIR_AUTOUNREF and get rid of the cleanup label. Signed-off-by: Peter Krempa <pkrempa@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
parent
3fbaf0587c
commit
7d60b1f45f
@ -10004,21 +10004,18 @@ qemuDomainDetermineDiskChain(virQEMUDriverPtr driver,
|
|||||||
virStorageSourcePtr disksrc,
|
virStorageSourcePtr disksrc,
|
||||||
bool report_broken)
|
bool report_broken)
|
||||||
{
|
{
|
||||||
virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
|
VIR_AUTOUNREF(virQEMUDriverConfigPtr) cfg = virQEMUDriverGetConfig(driver);
|
||||||
virStorageSourcePtr src; /* iterator for the backing chain declared in XML */
|
virStorageSourcePtr src; /* iterator for the backing chain declared in XML */
|
||||||
virStorageSourcePtr n; /* iterator for the backing chain detected from disk */
|
virStorageSourcePtr n; /* iterator for the backing chain detected from disk */
|
||||||
qemuDomainObjPrivatePtr priv = vm->privateData;
|
qemuDomainObjPrivatePtr priv = vm->privateData;
|
||||||
int ret = -1;
|
|
||||||
uid_t uid;
|
uid_t uid;
|
||||||
gid_t gid;
|
gid_t gid;
|
||||||
|
|
||||||
if (!disksrc)
|
if (!disksrc)
|
||||||
disksrc = disk->src;
|
disksrc = disk->src;
|
||||||
|
|
||||||
if (virStorageSourceIsEmpty(disksrc)) {
|
if (virStorageSourceIsEmpty(disksrc))
|
||||||
ret = 0;
|
return 0;
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* There is no need to check the backing chain for disks without backing
|
/* There is no need to check the backing chain for disks without backing
|
||||||
* support */
|
* support */
|
||||||
@ -10030,13 +10027,13 @@ qemuDomainDetermineDiskChain(virQEMUDriverPtr driver,
|
|||||||
if (report_broken)
|
if (report_broken)
|
||||||
virStorageFileReportBrokenChain(errno, disksrc, disksrc);
|
virStorageFileReportBrokenChain(errno, disksrc, disksrc);
|
||||||
|
|
||||||
goto cleanup;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* terminate the chain for such images as the code below would do */
|
/* terminate the chain for such images as the code below would do */
|
||||||
if (!disksrc->backingStore &&
|
if (!disksrc->backingStore &&
|
||||||
!(disksrc->backingStore = virStorageSourceNew()))
|
!(disksrc->backingStore = virStorageSourceNew()))
|
||||||
goto cleanup;
|
return -1;
|
||||||
|
|
||||||
/* host cdrom requires special treatment in qemu, so we need to check
|
/* host cdrom requires special treatment in qemu, so we need to check
|
||||||
* whether a block device is a cdrom */
|
* whether a block device is a cdrom */
|
||||||
@ -10046,8 +10043,7 @@ qemuDomainDetermineDiskChain(virQEMUDriverPtr driver,
|
|||||||
virFileIsCDROM(disksrc->path) == 1)
|
virFileIsCDROM(disksrc->path) == 1)
|
||||||
disksrc->hostcdrom = true;
|
disksrc->hostcdrom = true;
|
||||||
|
|
||||||
ret = 0;
|
return 0;
|
||||||
goto cleanup;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
src = disksrc;
|
src = disksrc;
|
||||||
@ -10057,16 +10053,16 @@ qemuDomainDetermineDiskChain(virQEMUDriverPtr driver,
|
|||||||
int rv = virStorageFileSupportsAccess(src);
|
int rv = virStorageFileSupportsAccess(src);
|
||||||
|
|
||||||
if (rv < 0)
|
if (rv < 0)
|
||||||
goto cleanup;
|
return -1;
|
||||||
|
|
||||||
if (rv > 0) {
|
if (rv > 0) {
|
||||||
if (qemuDomainStorageFileInit(driver, vm, src, disksrc) < 0)
|
if (qemuDomainStorageFileInit(driver, vm, src, disksrc) < 0)
|
||||||
goto cleanup;
|
return -1;
|
||||||
|
|
||||||
if (virStorageFileAccess(src, F_OK) < 0) {
|
if (virStorageFileAccess(src, F_OK) < 0) {
|
||||||
virStorageFileReportBrokenChain(errno, src, disksrc);
|
virStorageFileReportBrokenChain(errno, src, disksrc);
|
||||||
virStorageFileDeinit(src);
|
virStorageFileDeinit(src);
|
||||||
goto cleanup;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
virStorageFileDeinit(src);
|
virStorageFileDeinit(src);
|
||||||
@ -10077,33 +10073,27 @@ qemuDomainDetermineDiskChain(virQEMUDriverPtr driver,
|
|||||||
|
|
||||||
/* We skipped to the end of the chain. Skip detection if there's the
|
/* We skipped to the end of the chain. Skip detection if there's the
|
||||||
* terminator. (An allocated but empty backingStore) */
|
* terminator. (An allocated but empty backingStore) */
|
||||||
if (src->backingStore) {
|
if (src->backingStore)
|
||||||
ret = 0;
|
return 0;
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
qemuDomainGetImageIds(cfg, vm, src, disksrc, &uid, &gid);
|
qemuDomainGetImageIds(cfg, vm, src, disksrc, &uid, &gid);
|
||||||
|
|
||||||
if (virStorageFileGetMetadata(src, uid, gid, report_broken) < 0)
|
if (virStorageFileGetMetadata(src, uid, gid, report_broken) < 0)
|
||||||
goto cleanup;
|
return -1;
|
||||||
|
|
||||||
for (n = src->backingStore; virStorageSourceIsBacking(n); n = n->backingStore) {
|
for (n = src->backingStore; virStorageSourceIsBacking(n); n = n->backingStore) {
|
||||||
if (qemuDomainValidateStorageSource(n, priv->qemuCaps) < 0)
|
if (qemuDomainValidateStorageSource(n, priv->qemuCaps) < 0)
|
||||||
goto cleanup;
|
return -1;
|
||||||
|
|
||||||
if (qemuDomainPrepareDiskSourceData(disk, n, cfg, priv->qemuCaps) < 0)
|
if (qemuDomainPrepareDiskSourceData(disk, n, cfg, priv->qemuCaps) < 0)
|
||||||
goto cleanup;
|
return -1;
|
||||||
|
|
||||||
if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKDEV) &&
|
if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKDEV) &&
|
||||||
qemuDomainPrepareStorageSourceBlockdev(disk, n, priv, cfg) < 0)
|
qemuDomainPrepareStorageSourceBlockdev(disk, n, priv, cfg) < 0)
|
||||||
goto cleanup;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = 0;
|
return 0;
|
||||||
|
|
||||||
cleanup:
|
|
||||||
virObjectUnref(cfg);
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user