Blame SOURCES/libvirt-qemu-forbid-snapshot-delete-children-only-on-external-snapshot.patch

9119d9
From b028739e4fce3d1b8e1ac5009f2e2def2f53f2e2 Mon Sep 17 00:00:00 2001
9119d9
Message-Id: <b028739e4fce3d1b8e1ac5009f2e2def2f53f2e2@dist-git>
9119d9
From: Eric Blake <eblake@redhat.com>
9119d9
Date: Tue, 28 Oct 2014 08:21:17 -0600
9119d9
Subject: [PATCH] qemu: forbid snapshot-delete --children-only on external
9119d9
 snapshot
9119d9
9119d9
https://bugzilla.redhat.com/show_bug.cgi?id=956506 documents that
9119d9
given a domain where an internal snapshot parent has an external
9119d9
snapshot child, we lacked a safety check when trying to use the
9119d9
--children-only option to snapshot-delete:
9119d9
9119d9
$ virsh start dom
9119d9
$ virsh snapshot-create-as dom internal
9119d9
$ virsh snapshot-create-as dom external --disk-only
9119d9
$ virsh snapshot-delete dom external
9119d9
error: Failed to delete snapshot external
9119d9
error: unsupported configuration: deletion of 1 external disk snapshots not supported yet
9119d9
$ virsh snapshot-delete dom internal --children
9119d9
error: Failed to delete snapshot internal
9119d9
error: unsupported configuration: deletion of 1 external disk snapshots not supported yet
9119d9
$ virsh snapshot-delete dom internal --children-only
9119d9
Domain snapshot internal children deleted
9119d9
9119d9
While I'd still like to see patches that actually do proper external
9119d9
snapshot deletion, we should at least fix the inconsistency in the
9119d9
meantime.  With this patch:
9119d9
9119d9
$ virsh snapshot-delete dom internal --children-only
9119d9
error: Failed to delete snapshot internal
9119d9
error: unsupported configuration: deletion of 1 external disk snapshots not supported yet
9119d9
9119d9
* src/qemu/qemu_driver.c (qemuDomainSnapshotDelete): Fix condition.
9119d9
9119d9
Signed-off-by: Eric Blake <eblake@redhat.com>
9119d9
(cherry picked from commit 2086a9905aac877d1618f96c7eea8e3d6a01fd9a)
9119d9
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
9119d9
---
9119d9
 src/qemu/qemu_driver.c | 3 ++-
9119d9
 1 file changed, 2 insertions(+), 1 deletion(-)
9119d9
9119d9
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
9119d9
index 3c1d2f5..88a1895 100644
9119d9
--- a/src/qemu/qemu_driver.c
9119d9
+++ b/src/qemu/qemu_driver.c
9119d9
@@ -14612,7 +14612,8 @@ qemuDomainSnapshotDelete(virDomainSnapshotPtr snapshot,
9119d9
         if (!(flags & VIR_DOMAIN_SNAPSHOT_DELETE_CHILDREN_ONLY) &&
9119d9
             virDomainSnapshotIsExternal(snap))
9119d9
             external++;
9119d9
-        if (flags & VIR_DOMAIN_SNAPSHOT_DELETE_CHILDREN)
9119d9
+        if (flags & (VIR_DOMAIN_SNAPSHOT_DELETE_CHILDREN |
9119d9
+                     VIR_DOMAIN_SNAPSHOT_DELETE_CHILDREN_ONLY))
9119d9
             virDomainSnapshotForEachDescendant(snap,
9119d9
                                                qemuDomainSnapshotCountExternal,
9119d9
                                                &external);
9119d9
-- 
9119d9
2.1.3
9119d9