[lxc-devel] [PATCH] Fix clone issues

Serge Hallyn serge.hallyn at ubuntu.com
Wed Nov 5 14:36:07 UTC 2014


Quoting KATOH Yasufumi (karma at jazz.email.ne.jp):
> This commit fixes two issues at the time of clone:
> * unnecessary directory is created when clone between overlayfs/aufs
> * clone failed when the end of rootfs path is not "/rootfs"
> 
> Signed-off-by: KATOH Yasufumi <karma at jazz.email.ne.jp>

Great - thank you.

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

> ---
>  src/lxc/bdev.c | 26 +++++++++++++++++++++++++-
>  1 file changed, 25 insertions(+), 1 deletion(-)
> 
> diff --git a/src/lxc/bdev.c b/src/lxc/bdev.c
> index ae5c77c..c95f3f0 100644
> --- a/src/lxc/bdev.c
> +++ b/src/lxc/bdev.c
> @@ -3328,6 +3328,7 @@ struct bdev *bdev_copy(struct lxc_container *c0, const char *cname,
>  	const char *oldname = c0->name;
>  	const char *oldpath = c0->config_path;
>  	struct rsync_data data;
> +	char *rootfs;
>  
>  	/* if the container name doesn't show up in the rootfs path, then
>  	 * we don't know how to come up with a new name
> @@ -3338,12 +3339,35 @@ struct bdev *bdev_copy(struct lxc_container *c0, const char *cname,
>  		return NULL;
>  	}
>  
> -	orig = bdev_init(c0->lxc_conf, src, src, NULL);
> +	orig = bdev_init(c0->lxc_conf, src, NULL, NULL);
>  	if (!orig) {
>  		ERROR("failed to detect blockdev type for %s", src);
>  		return NULL;
>  	}
>  
> +	if (!orig->dest) {
> +		int ret;
> +		orig->dest = malloc(MAXPATHLEN);
> +		if (!orig->dest) {
> +			ERROR("out of memory");
> +			bdev_put(orig);
> +			return NULL;
> +		}
> +		rootfs = strrchr(orig->src, '/');
> +		if (!rootfs) {
> +			ERROR("invalid rootfs path");
> +			bdev_put(orig);
> +			return NULL;
> +		}
> +		rootfs++;
> +		ret = snprintf(orig->dest, MAXPATHLEN, "%s/%s/%s", oldpath, oldname, rootfs);
> +		if (ret < 0 || ret >= MAXPATHLEN) {
> +			ERROR("rootfs path too long");
> +			bdev_put(orig);
> +			return NULL;
> +		}
> +	}
> +
>  	/*
>  	 * special case for snapshot - if caller requested maybe_snapshot and
>  	 * keepbdevtype and backing store is directory, then proceed with a copy
> -- 
> 2.1.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