[lxc-devel] [PATCH 2/2] api_clone: don't remove storage if we haven't created it

Serge Hallyn serge.hallyn at ubuntu.com
Fri Jun 21 19:16:42 UTC 2013


In the best case we'll get errors about failing to remove it.  In the
worst case we'll be trying to delete the original container's rootfs.

Reported-by: zoolook <nbensa+lxcusers at gmail.com>
Signed-off-by: Serge Hallyn <serge.hallyn at ubuntu.com>
---
 src/lxc/lxccontainer.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c
index b6d5b2f..677fa56 100644
--- a/src/lxc/lxccontainer.c
+++ b/src/lxc/lxccontainer.c
@@ -1866,7 +1866,7 @@ struct lxc_container *lxcapi_clone(struct lxc_container *c, const char *newname,
 {
 	struct lxc_container *c2 = NULL;
 	char newpath[MAXPATHLEN];
-	int ret;
+	int ret, storage_copied = 0;
 	const char *n, *l;
 	FILE *fout;
 
@@ -1948,6 +1948,10 @@ struct lxc_container *lxcapi_clone(struct lxc_container *c, const char *newname,
 	if (ret < 0)
 		goto out;
 
+	// We've now successfully created c2's storage, so clear it out if we
+	// fail after this
+	storage_copied = 1;
+
 	if (!c2->save_config(c2, NULL))
 		goto out;
 
@@ -1961,6 +1965,8 @@ struct lxc_container *lxcapi_clone(struct lxc_container *c, const char *newname,
 out:
 	container_mem_unlock(c);
 	if (c2) {
+		if (!storage_copied)
+			c2->lxc_conf->rootfs.path = NULL;
 		c2->destroy(c2);
 		lxc_container_put(c2);
 	}
-- 
1.8.1.2





More information about the lxc-devel mailing list