[libvirt PATCH 18/30] qemu_snapshot: introduce qemuSnapshotDiscardMetadata
Peter Krempa
pkrempa at redhat.com
Tue Dec 13 13:59:16 UTC 2022
On Thu, Dec 08, 2022 at 14:30:54 +0100, Pavel Hrdina wrote:
> Extract the code deleting external snapshot metadata to separate
> function.
>
> Signed-off-by: Pavel Hrdina <phrdina at redhat.com>
> ---
> src/qemu/qemu_snapshot.c | 91 +++++++++++++++++++++++-----------------
> 1 file changed, 53 insertions(+), 38 deletions(-)
>
> diff --git a/src/qemu/qemu_snapshot.c b/src/qemu/qemu_snapshot.c
> index 5418496c1e..4ea3f578e9 100644
> --- a/src/qemu/qemu_snapshot.c
> +++ b/src/qemu/qemu_snapshot.c
> @@ -2281,47 +2281,15 @@ qemuSnapshotChildrenReparent(void *payload,
> }
>
>
> -/* Discard one snapshot (or its metadata), without reparenting any children. */
> static int
> -qemuSnapshotDiscard(virQEMUDriver *driver,
> - virDomainObj *vm,
> - virDomainMomentObj *snap,
> - bool update_parent,
> - bool metadata_only)
> +qemuSnapshotDiscardMetadata(virDomainObj *vm,
> + virDomainMomentObj *snap,
> + bool update_parent)
> {
> + qemuDomainObjPrivate *priv = vm->privateData;
> + virQEMUDriver *driver = priv->driver;
> + g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver);
> g_autofree char *snapFile = NULL;
> - qemuDomainObjPrivate *priv;
> - virDomainMomentObj *parentsnap = NULL;
> - g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver);
> -
> - if (!metadata_only) {
> - if (!virDomainObjIsActive(vm)) {
> - size_t i;
> - /* Ignore any skipped disks */
> -
> - /* Prefer action on the disks in use at the time the snapshot was
> - * created; but fall back to current definition if dealing with a
> - * snapshot created prior to libvirt 0.9.5. */
> - virDomainDef *def = snap->def->dom;
> -
> - if (!def)
> - def = vm->def;
> -
> - for (i = 0; i < def->ndisks; i++) {
> - if (virDomainDiskTranslateSourcePool(def->disks[i]) < 0)
> - return -1;
> - }
> -
> - if (qemuDomainSnapshotForEachQcow2(driver, def, snap, "-d", true) < 0)
> - return -1;
> - } else {
> - priv = vm->privateData;
> - qemuDomainObjEnterMonitor(vm);
> - /* we continue on even in the face of error */
> - qemuMonitorDeleteSnapshot(priv->mon, snap->def->name);
> - qemuDomainObjExitMonitor(vm);
> - }
> - }
>
> if (update_parent) {
> if (snap->nchildren) {
> @@ -2348,6 +2316,7 @@ qemuSnapshotDiscard(virQEMUDriver *driver,
> if (snap == virDomainSnapshotGetCurrent(vm->snapshots)) {
> virDomainSnapshotSetCurrent(vm->snapshots, NULL);
> if (update_parent && snap->def->parent_name) {
> + virDomainMomentObj *parentsnap = NULL;
> parentsnap = virDomainSnapshotFindByName(vm->snapshots,
> snap->def->parent_name);
> if (!parentsnap) {
> @@ -2376,6 +2345,52 @@ qemuSnapshotDiscard(virQEMUDriver *driver,
> }
>
>
> +/* Discard one snapshot (or its metadata), without reparenting any children. */
> +static int
> +qemuSnapshotDiscard(virQEMUDriver *driver,
> + virDomainObj *vm,
> + virDomainMomentObj *snap,
> + bool update_parent,
> + bool metadata_only)
> +{
> + qemuDomainObjPrivate *priv;
Declare this variable ...
> +
> + if (!metadata_only) {
> + if (!virDomainObjIsActive(vm)) {
> + size_t i;
> + /* Ignore any skipped disks */
> +
> + /* Prefer action on the disks in use at the time the snapshot was
> + * created; but fall back to current definition if dealing with a
> + * snapshot created prior to libvirt 0.9.5. */
> + virDomainDef *def = snap->def->dom;
> +
> + if (!def)
> + def = vm->def;
> +
> + for (i = 0; i < def->ndisks; i++) {
> + if (virDomainDiskTranslateSourcePool(def->disks[i]) < 0)
> + return -1;
> + }
> +
> + if (qemuDomainSnapshotForEachQcow2(driver, def, snap, "-d", true) < 0)
> + return -1;
> + } else {
> + priv = vm->privateData;
... here.
> + qemuDomainObjEnterMonitor(vm);
> + /* we continue on even in the face of error */
> + qemuMonitorDeleteSnapshot(priv->mon, snap->def->name);
but since it's only used for monitor you can also do
'qemuDomainGetMonitor(vm)' here instead.
> + qemuDomainObjExitMonitor(vm);
> + }
Reviewed-by: Peter Krempa <pkrempa at redhat.com>
More information about the libvir-list
mailing list