]> git.proxmox.com Git - mirror_lxc.git/commitdiff
api_clone: don't remove storage if we haven't created it
authorSerge Hallyn <serge.hallyn@ubuntu.com>
Fri, 21 Jun 2013 19:16:42 +0000 (14:16 -0500)
committerSerge Hallyn <serge.hallyn@ubuntu.com>
Mon, 24 Jun 2013 18:56:05 +0000 (13:56 -0500)
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@gmail.com>
Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
src/lxc/lxccontainer.c

index b6d5b2ff536ef08b26c139303cb763b8b1e20c04..677fa561e248d03a70f5e4e4591d0c967adf0134 100644 (file)
@@ -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);
        }