1
0
mirror of https://gitlab.com/libvirt/libvirt.git synced 2025-03-20 07:59:00 +00:00

virDomainCheckpointAlignDisks: Use 'domdef' for domain definition

Extract the pointer and use a local variable throughout the function.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
Peter Krempa 2020-12-01 17:18:44 +01:00
parent 230655ba06
commit 1c3f8ff784

View File

@ -292,25 +292,26 @@ virDomainCheckpointCompareDiskIndex(const void *a, const void *b)
int int
virDomainCheckpointAlignDisks(virDomainCheckpointDefPtr def) virDomainCheckpointAlignDisks(virDomainCheckpointDefPtr def)
{ {
virDomainDefPtr domdef = def->parent.dom;
g_autoptr(virBitmap) map = NULL; g_autoptr(virBitmap) map = NULL;
size_t i; size_t i;
int ndisks; int ndisks;
int checkpoint_default = VIR_DOMAIN_CHECKPOINT_TYPE_NONE; int checkpoint_default = VIR_DOMAIN_CHECKPOINT_TYPE_NONE;
if (!def->parent.dom) { if (!domdef) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s", virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("missing domain in checkpoint")); _("missing domain in checkpoint"));
return -1; return -1;
} }
if (def->ndisks > def->parent.dom->ndisks) { if (def->ndisks > domdef->ndisks) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("too many disk checkpoint requests for domain")); _("too many disk checkpoint requests for domain"));
return -1; 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 (!domdef->ndisks) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("domain must have at least one disk to perform checkpoints")); _("domain must have at least one disk to perform checkpoints"));
return -1; return -1;
@ -321,12 +322,12 @@ virDomainCheckpointAlignDisks(virDomainCheckpointDefPtr def)
if (!def->ndisks) if (!def->ndisks)
checkpoint_default = VIR_DOMAIN_CHECKPOINT_TYPE_BITMAP; checkpoint_default = VIR_DOMAIN_CHECKPOINT_TYPE_BITMAP;
map = virBitmapNew(def->parent.dom->ndisks); map = virBitmapNew(domdef->ndisks);
/* Double check requested disks. */ /* Double check requested disks. */
for (i = 0; i < def->ndisks; i++) { for (i = 0; i < def->ndisks; i++) {
virDomainCheckpointDiskDefPtr disk = &def->disks[i]; virDomainCheckpointDiskDefPtr disk = &def->disks[i];
int idx = virDomainDiskIndexByName(def->parent.dom, disk->name, false); int idx = virDomainDiskIndexByName(domdef, disk->name, false);
if (idx < 0) { if (idx < 0) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
@ -340,8 +341,8 @@ virDomainCheckpointAlignDisks(virDomainCheckpointDefPtr def)
disk->name); disk->name);
return -1; return -1;
} }
if ((virStorageSourceIsEmpty(def->parent.dom->disks[idx]->src) || if ((virStorageSourceIsEmpty(domdef->disks[idx]->src) ||
def->parent.dom->disks[idx]->src->readonly) && domdef->disks[idx]->src->readonly) &&
disk->type != VIR_DOMAIN_CHECKPOINT_TYPE_NONE) { disk->type != VIR_DOMAIN_CHECKPOINT_TYPE_NONE) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("disk '%s' is empty or readonly"), _("disk '%s' is empty or readonly"),
@ -351,30 +352,30 @@ virDomainCheckpointAlignDisks(virDomainCheckpointDefPtr def)
ignore_value(virBitmapSetBit(map, idx)); ignore_value(virBitmapSetBit(map, idx));
disk->idx = idx; disk->idx = idx;
if (STRNEQ(disk->name, def->parent.dom->disks[idx]->dst)) { if (STRNEQ(disk->name, domdef->disks[idx]->dst)) {
VIR_FREE(disk->name); VIR_FREE(disk->name);
disk->name = g_strdup(def->parent.dom->disks[idx]->dst); disk->name = g_strdup(domdef->disks[idx]->dst);
} }
} }
/* Provide defaults for all remaining disks. */ /* Provide defaults for all remaining disks. */
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) domdef->ndisks - def->ndisks) < 0)
return -1; return -1;
for (i = 0; i < def->parent.dom->ndisks; i++) { for (i = 0; i < domdef->ndisks; i++) {
virDomainCheckpointDiskDefPtr disk; virDomainCheckpointDiskDefPtr disk;
if (virBitmapIsBitSet(map, i)) if (virBitmapIsBitSet(map, i))
continue; continue;
disk = &def->disks[ndisks++]; disk = &def->disks[ndisks++];
disk->name = g_strdup(def->parent.dom->disks[i]->dst); disk->name = g_strdup(domdef->disks[i]->dst);
disk->idx = i; disk->idx = i;
/* Don't checkpoint empty or readonly drives */ /* Don't checkpoint empty or readonly drives */
if (virStorageSourceIsEmpty(def->parent.dom->disks[i]->src) || if (virStorageSourceIsEmpty(domdef->disks[i]->src) ||
def->parent.dom->disks[i]->src->readonly) domdef->disks[i]->src->readonly)
disk->type = VIR_DOMAIN_CHECKPOINT_TYPE_NONE; disk->type = VIR_DOMAIN_CHECKPOINT_TYPE_NONE;
else else
disk->type = checkpoint_default; disk->type = checkpoint_default;