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

Serge Hallyn serge.hallyn at ubuntu.com
Sun May 25 03:39:53 UTC 2014


Quoting S.Çağlar Onur (caglar at 10ur.org):
> Signed-off-by: S.Çağlar Onur <caglar at 10ur.org>

Acked-by: Serge E. Hallyn <serge.hallyn at ubuntu.com>

> ---
>  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
> 
> _______________________________________________
> lxc-devel mailing list
> lxc-devel at lists.linuxcontainers.org
> http://lists.linuxcontainers.org/listinfo/lxc-devel


More information about the lxc-devel mailing list