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

virDomainSnapshotAlignDisks: Refactor cleanup

Use automatic pointer for the bitmap and get rid of the 'cleanup' label
and 'ret' variable.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
Peter Krempa 2020-09-21 17:06:31 +02:00
parent 1bb0faa51a
commit c4e320d6cf

View File

@ -649,31 +649,28 @@ virDomainSnapshotAlignDisks(virDomainSnapshotDefPtr def,
int default_snapshot, int default_snapshot,
bool require_match) bool require_match)
{ {
int ret = -1; g_autoptr(virBitmap) map = NULL;
virBitmapPtr map = NULL;
size_t i; size_t i;
int ndisks; int ndisks;
if (!def->parent.dom) { if (!def->parent.dom) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s", virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("missing domain in snapshot")); _("missing domain in snapshot"));
goto cleanup; return -1;
} }
if (def->ndisks > def->parent.dom->ndisks) { if (def->ndisks > def->parent.dom->ndisks) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("too many disk snapshot requests for domain")); _("too many disk snapshot requests for domain"));
goto cleanup; return -1;
} }
/* Unlikely to have a guest without disks but technically possible. */ /* Unlikely to have a guest without disks but technically possible. */
if (!def->parent.dom->ndisks) { if (!def->parent.dom->ndisks)
ret = 0; return 0;
goto cleanup;
}
if (!(map = virBitmapNew(def->parent.dom->ndisks))) if (!(map = virBitmapNew(def->parent.dom->ndisks)))
goto cleanup; return -1;
/* Double check requested disks. */ /* Double check requested disks. */
for (i = 0; i < def->ndisks; i++) { for (i = 0; i < def->ndisks; i++) {
@ -684,14 +681,14 @@ virDomainSnapshotAlignDisks(virDomainSnapshotDefPtr def,
if (idx < 0) { if (idx < 0) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("no disk named '%s'"), disk->name); _("no disk named '%s'"), disk->name);
goto cleanup; return -1;
} }
if (virBitmapIsBitSet(map, idx)) { if (virBitmapIsBitSet(map, idx)) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("disk '%s' specified twice"), _("disk '%s' specified twice"),
disk->name); disk->name);
goto cleanup; return -1;
} }
ignore_value(virBitmapSetBit(map, idx)); ignore_value(virBitmapSetBit(map, idx));
disk->idx = idx; disk->idx = idx;
@ -714,7 +711,7 @@ virDomainSnapshotAlignDisks(virDomainSnapshotDefPtr def,
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("disk '%s' must use snapshot mode '%s'"), _("disk '%s' must use snapshot mode '%s'"),
disk->name, tmp); disk->name, tmp);
goto cleanup; return -1;
} }
if (disk->src->path && if (disk->src->path &&
disk->snapshot != VIR_DOMAIN_SNAPSHOT_LOCATION_EXTERNAL) { disk->snapshot != VIR_DOMAIN_SNAPSHOT_LOCATION_EXTERNAL) {
@ -722,7 +719,7 @@ virDomainSnapshotAlignDisks(virDomainSnapshotDefPtr def,
_("file '%s' for disk '%s' requires " _("file '%s' for disk '%s' requires "
"use of external snapshot mode"), "use of external snapshot mode"),
disk->src->path, disk->name); disk->src->path, disk->name);
goto cleanup; return -1;
} }
if (STRNEQ(disk->name, def->parent.dom->disks[idx]->dst)) { if (STRNEQ(disk->name, def->parent.dom->disks[idx]->dst)) {
VIR_FREE(disk->name); VIR_FREE(disk->name);
@ -734,7 +731,7 @@ virDomainSnapshotAlignDisks(virDomainSnapshotDefPtr def,
ndisks = def->ndisks; ndisks = def->ndisks;
if (VIR_EXPAND_N(def->disks, def->ndisks, if (VIR_EXPAND_N(def->disks, def->ndisks,
def->parent.dom->ndisks - def->ndisks) < 0) def->parent.dom->ndisks - def->ndisks) < 0)
goto cleanup; return -1;
for (i = 0; i < def->parent.dom->ndisks; i++) { for (i = 0; i < def->parent.dom->ndisks; i++) {
virDomainSnapshotDiskDefPtr disk; virDomainSnapshotDiskDefPtr disk;
@ -762,13 +759,9 @@ virDomainSnapshotAlignDisks(virDomainSnapshotDefPtr def,
/* Generate default external file names for external snapshot locations */ /* Generate default external file names for external snapshot locations */
if (virDomainSnapshotDefAssignExternalNames(def) < 0) if (virDomainSnapshotDefAssignExternalNames(def) < 0)
goto cleanup; return -1;
ret = 0; return 0;
cleanup:
virBitmapFree(map);
return ret;
} }