--- Just example how we could support this specific use-case where snapshot in question is external and all children are only internal. But I would rather drop this patch and in the following patch series drop support for both children flags completely as users or management applications can to that themselves.
src/qemu/qemu_snapshot.c | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/src/qemu/qemu_snapshot.c b/src/qemu/qemu_snapshot.c index 29d147f834..092bec6cc2 100644 --- a/src/qemu/qemu_snapshot.c +++ b/src/qemu/qemu_snapshot.c @@ -2835,6 +2835,7 @@ static int qemuSnapshotDeleteChildren(virDomainObj *vm, virDomainMomentObj *snap, virQEMUDriver *driver, + GPtrArray *externalData, bool metadata_only, unsigned int flags) { @@ -2850,7 +2851,7 @@ qemuSnapshotDeleteChildren(virDomainObj *vm, return -1; if (flags & VIR_DOMAIN_SNAPSHOT_DELETE_CHILDREN) { - return qemuSnapshotDeleteSingle(vm, snap, driver, NULL, metadata_only); + return qemuSnapshotDeleteSingle(vm, snap, driver, externalData, metadata_only); } return 0; @@ -2906,13 +2907,6 @@ qemuSnapshotDeleteValidate(virDomainMomentObj *snap, return -1; } - if (virDomainSnapshotIsExternal(snap) && - (flags & VIR_DOMAIN_SNAPSHOT_DELETE_CHILDREN)) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("deletion of external disk snapshot with internal children disk snapshots not supported")); - return -1; - } - return 0; } @@ -2943,9 +2937,7 @@ qemuSnapshotDelete(virDomainObj *vm, if (qemuSnapshotDeleteValidate(snap, flags) < 0) goto endjob; - if (virDomainSnapshotIsExternal(snap) && - !(flags & (VIR_DOMAIN_SNAPSHOT_DELETE_CHILDREN | - VIR_DOMAIN_SNAPSHOT_DELETE_CHILDREN_ONLY))) { + if (virDomainSnapshotIsExternal(snap)) { if (!virDomainObjIsActive(vm)) { if (qemuProcessStart(NULL, driver, vm, NULL, VIR_ASYNC_JOB_NONE, NULL, -1, NULL, NULL, @@ -2965,7 +2957,8 @@ qemuSnapshotDelete(virDomainObj *vm, if (flags & (VIR_DOMAIN_SNAPSHOT_DELETE_CHILDREN | VIR_DOMAIN_SNAPSHOT_DELETE_CHILDREN_ONLY)) { - ret = qemuSnapshotDeleteChildren(vm, snap, driver, metadata_only, flags); + ret = qemuSnapshotDeleteChildren(vm, snap, driver, externalData, + metadata_only, flags); } else { ret = qemuSnapshotDeleteSingle(vm, snap, driver, externalData, metadata_only); } -- 2.37.2