qemu: snapshot: Don't overload 'ret' in qemuDomainSnapshotCreateDiskActive

Introduce 'rc' for collecting state from monitor commands so that we can
initialize 'ret' to -1. This also fixes few cases which could return 0
from the function despite an error condition.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
Peter Krempa 2019-06-05 15:29:37 +02:00
parent a7087c929e
commit 46da762669

View File

@ -15239,7 +15239,8 @@ qemuDomainSnapshotCreateDiskActive(virQEMUDriverPtr driver,
qemuDomainObjPrivatePtr priv = vm->privateData; qemuDomainObjPrivatePtr priv = vm->privateData;
VIR_AUTOPTR(virJSONValue) actions = NULL; VIR_AUTOPTR(virJSONValue) actions = NULL;
bool do_transaction = false; bool do_transaction = false;
int ret = 0; int rc;
int ret = -1;
size_t i; size_t i;
bool reuse = (flags & VIR_DOMAIN_SNAPSHOT_CREATE_REUSE_EXT) != 0; bool reuse = (flags & VIR_DOMAIN_SNAPSHOT_CREATE_REUSE_EXT) != 0;
qemuDomainSnapshotDiskDataPtr diskdata = NULL; qemuDomainSnapshotDiskDataPtr diskdata = NULL;
@ -15263,11 +15264,9 @@ qemuDomainSnapshotCreateDiskActive(virQEMUDriverPtr driver,
* VIR_DOMAIN_SNAPSHOT_LOCATION_EXTERNAL with a valid file name and * VIR_DOMAIN_SNAPSHOT_LOCATION_EXTERNAL with a valid file name and
* qcow2 format. */ * qcow2 format. */
for (i = 0; i < ndiskdata; i++) { for (i = 0; i < ndiskdata; i++) {
ret = qemuDomainSnapshotCreateSingleDiskActive(driver, vm, if (qemuDomainSnapshotCreateSingleDiskActive(driver, vm,
&diskdata[i], &diskdata[i],
actions, reuse); actions, reuse) < 0)
if (ret < 0)
goto error; goto error;
do_transaction = true; do_transaction = true;
@ -15277,24 +15276,26 @@ qemuDomainSnapshotCreateDiskActive(virQEMUDriverPtr driver,
if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0)
goto cleanup; goto cleanup;
ret = qemuMonitorTransaction(priv->mon, &actions); rc = qemuMonitorTransaction(priv->mon, &actions);
if (qemuDomainObjExitMonitor(driver, vm) < 0) if (qemuDomainObjExitMonitor(driver, vm) < 0)
ret = -1; rc = -1;
for (i = 0; i < ndiskdata; i++) { for (i = 0; i < ndiskdata; i++) {
qemuDomainSnapshotDiskDataPtr dd = &diskdata[i]; qemuDomainSnapshotDiskDataPtr dd = &diskdata[i];
virDomainAuditDisk(vm, dd->disk->src, dd->src, "snapshot", ret >= 0); virDomainAuditDisk(vm, dd->disk->src, dd->src, "snapshot", rc >= 0);
if (ret == 0) if (rc == 0)
qemuDomainSnapshotUpdateDiskSources(dd); qemuDomainSnapshotUpdateDiskSources(dd);
} }
if (ret < 0) if (rc < 0)
goto error; goto error;
} }
ret = 0;
error: error:
if (ret < 0) { if (ret < 0) {
virErrorPreserveLast(&orig_err); virErrorPreserveLast(&orig_err);