On Mon, Mar 13, 2023 at 16:42:15 +0100, Pavel Hrdina wrote: > When block commit is not needed we can just simply unlink the > disk files. > > Signed-off-by: Pavel Hrdina <phrdina@xxxxxxxxxx> > --- > src/qemu/qemu_snapshot.c | 55 +++++++++++++++++++++++++--------------- > 1 file changed, 35 insertions(+), 20 deletions(-) > > diff --git a/src/qemu/qemu_snapshot.c b/src/qemu/qemu_snapshot.c > index be2e5c8cc4..dbcdf56758 100644 > --- a/src/qemu/qemu_snapshot.c > +++ b/src/qemu/qemu_snapshot.c [...] > @@ -2949,31 +2951,41 @@ qemuSnapshotDiscardExternal(virDomainObj *vm, > virTristateBool autofinalize = VIR_TRISTATE_BOOL_NO; > unsigned int commitFlags = VIR_DOMAIN_BLOCK_COMMIT_DELETE; > > - if (data->domDisk->src == data->diskSrc) { > - commitFlags |= VIR_DOMAIN_BLOCK_COMMIT_ACTIVE; > - autofinalize = VIR_TRISTATE_BOOL_YES; > + if (data->blockCommit) { > + if (data->domDisk->src == data->diskSrc) { > + commitFlags |= VIR_DOMAIN_BLOCK_COMMIT_ACTIVE; > + autofinalize = VIR_TRISTATE_BOOL_YES; > + } > + > + if (qemuSnapshotSetInvalid(vm, data->parentSnap, data->snapDisk, true) < 0) > + goto error; > + > + data->job = qemuBlockCommit(vm, > + data->domDisk, > + data->parentDiskSrc, > + data->diskSrc, > + data->prevDiskSrc, > + 0, > + VIR_ASYNC_JOB_SNAPSHOT, > + autofinalize, > + commitFlags); > + > + if (!data->job) > + goto error; > + } else { > + if (unlink(data->snapDisk->src->path) < 0) { This can be done only when the 'src' object is "local storage" (virStorageSourceIsLocalStorage) > + VIR_WARN("Failed to remove snapshot image '%s'", > + data->snapDisk->name); > + } Reviewed-by: Peter Krempa <pkrempa@xxxxxxxxxx>