[lxc-devel] [PATCH] destroy the original container after making sure the snapshot exists (fixes #224)

S.Çağlar Onur caglar at 10ur.org
Sun May 25 02:19:06 UTC 2014


Signed-off-by: S.Çağlar Onur <caglar at 10ur.org>
---
 src/lxc/lxccontainer.c | 17 ++++++++++-------
 1 file changed, 10 insertions(+), 7 deletions(-)

diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c
index fdac433..8e611c7 100644
--- a/src/lxc/lxccontainer.c
+++ b/src/lxc/lxccontainer.c
@@ -3083,13 +3083,7 @@ static bool lxcapi_snapshot_restore(struct lxc_container *c, const char *snapnam
 
 	if (!newname)
 		newname = c->name;
-	if (strcmp(c->name, newname) == 0) {
-		if (!lxcapi_destroy(c)) {
-			ERROR("Could not destroy existing container %s", newname);
-			bdev_put(bdev);
-			return false;
-		}
-	}
+
 	ret = snprintf(clonelxcpath, MAXPATHLEN, "%ssnaps/%s", c->config_path, c->name);
 	if (ret < 0 || ret >= MAXPATHLEN) {
 		bdev_put(bdev);
@@ -3105,6 +3099,15 @@ static bool lxcapi_snapshot_restore(struct lxc_container *c, const char *snapnam
 		return false;
 	}
 
+	if (strcmp(c->name, newname) == 0) {
+		if (!lxcapi_destroy(c)) {
+			ERROR("Could not destroy existing container %s", newname);
+			lxc_container_put(snap);
+			bdev_put(bdev);
+			return false;
+		}
+	}
+
 	if (strcmp(bdev->type, "dir") != 0 && strcmp(bdev->type, "loop") != 0)
 		flags = LXC_CLONE_SNAPSHOT | LXC_CLONE_MAYBE_SNAPSHOT;
 	rest = lxcapi_clone(snap, newname, c->config_path, flags,
-- 
1.9.1



More information about the lxc-devel mailing list