[libvirt] [PATCH 08/16] snapshot: Access snapshot def directly when needed

John Ferlan jferlan at redhat.com
Wed Mar 20 21:37:45 UTC 2019



On 3/20/19 1:40 AM, Eric Blake wrote:
> An upcoming patch will rework virDomainSnapshotObjList to be generic
> for both snapshots and checkpoints; reduce the churn by adding a new
> accessor virDomainSnapshotObjGetDef() which returns the
> snapshot-specific definition even when the list is rewritten to
> operate only on a base class, then using it at sites that that are
> specific to snapshots.
> 
> Signed-off-by: Eric Blake <eblake at redhat.com>
> ---
>  src/conf/virdomainsnapshotobj.h     |  6 +++++
>  src/conf/snapshot_conf.c            | 41 +++++++++++++++++------------
>  src/conf/virdomainsnapshotobjlist.c | 17 +++++++-----
>  src/qemu/qemu_domain.c              |  6 ++---
>  4 files changed, 43 insertions(+), 27 deletions(-)
> 

[...]

> diff --git a/src/conf/snapshot_conf.c b/src/conf/snapshot_conf.c
> index c692d36bd1..aec23f111c 100644
> --- a/src/conf/snapshot_conf.c
> +++ b/src/conf/snapshot_conf.c

[...]

> @@ -958,12 +964,13 @@ virDomainSnapshotRedefinePrep(virDomainPtr domain,
>      }
> 
>      other = virDomainSnapshotFindByName(vm->snapshots, def->name);
> -    check_if_stolen = other && other->def->dom;
> +    otherdef = other ? virDomainSnapshotObjGetDef(other) : NULL;
> +    check_if_stolen = other && otherdef->dom;
>      if (virDomainSnapshotRedefineValidate(def, domain->uuid, other, xmlopt,
>                                            flags) < 0) {
>          /* revert any stealing of the snapshot domain definition */
> -        if (check_if_stolen && def->dom && !other->def->dom) {
> -            other->def->dom = def->dom;
> +        if (check_if_stolen && def->dom && !otherdef->dom) {
> +            otherdef->dom = def->dom;
>              def->dom = NULL;
>          }
>          return -1;
> @@ -977,8 +984,8 @@ virDomainSnapshotRedefinePrep(virDomainPtr domain,
>          /* Drop and rebuild the parent relationship, but keep all
>           * child relations by reusing snap. */
>          virDomainSnapshotDropParent(other);
> -        virDomainSnapshotDefFree(other->def);
> -        other->def = def;
> +        virDomainSnapshotDefFree(otherdef);
> +        otherdef = def;

Too much substitution ;-/... leave the old code other->def = def; Or
maybe we'll need the corresponding virDomainSnapshotObjSetDef...

Reviewed-by: John Ferlan <jferlan at redhat.com>

John


>          *defptr = NULL;
>          *snap = other;
>      }

[...]




More information about the libvir-list mailing list