[lxc-devel] [PATCH 1/1] clone_paths: use 'rootfs' for destination directory
Stéphane Graber
stgraber at ubuntu.com
Thu Jan 29 16:53:04 UTC 2015
On Thu, Jan 29, 2015 at 04:09:45PM +0000, Serge Hallyn wrote:
> We were trying to be smart and use whatever the last part of
> the container's rootfs path was. However for block devices
> that doesn't make much sense. I.e. if lxc.rootfs = /dev/md-1,
> chances are that /var/lib/lxc/c1/md-1 does not exist.
>
> So always use the $lxcpath/$lxcname/rootfs, and if it does
> not exist, try to create it.
>
> With this, 'lxc-clone -s -o c1 -n c2' where c1 has an lvm backend
> is fixed. See https://bugs.launchpad.net/ubuntu/+source/lxc/+bug/1414771
>
> Signed-off-by: Serge Hallyn <serge.hallyn at ubuntu.com>
Acked-by: Stéphane Graber <stgraber at ubuntu.com>
> ---
> src/lxc/bdev.c | 22 +++++++++++-----------
> 1 file changed, 11 insertions(+), 11 deletions(-)
>
> diff --git a/src/lxc/bdev.c b/src/lxc/bdev.c
> index 721a72b..197ab55 100644
> --- a/src/lxc/bdev.c
> +++ b/src/lxc/bdev.c
> @@ -3340,7 +3340,6 @@ 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
> @@ -3359,25 +3358,26 @@ struct bdev *bdev_copy(struct lxc_container *c0, const char *cname,
>
> if (!orig->dest) {
> int ret;
> - orig->dest = malloc(MAXPATHLEN);
> + size_t len;
> + struct stat sb;
> +
> + len = strlen(oldpath) + strlen(oldname) + strlen("/rootfs") + 2;
> + orig->dest = malloc(len);
> 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) {
> + ret = snprintf(orig->dest, len, "%s/%s/rootfs", oldpath, oldname);
> + if (ret < 0 || ret >= len) {
> ERROR("rootfs path too long");
> bdev_put(orig);
> return NULL;
> }
> + ret = stat(orig->dest, &sb);
> + if (ret < 0 && errno == ENOENT)
> + if (mkdir_p(orig->dest, 0755) < 0)
> + WARN("Error creating '%s', continuing.", orig->dest);
> }
>
> /*
> --
> 2.1.0
>
> _______________________________________________
> lxc-devel mailing list
> lxc-devel at lists.linuxcontainers.org
> http://lists.linuxcontainers.org/listinfo/lxc-devel
--
Stéphane Graber
Ubuntu developer
http://www.ubuntu.com
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20150129/940b73ff/attachment.sig>
More information about the lxc-devel
mailing list