[lxc-devel] clone: clear the rootfs out of unexpanded config
Stéphane Graber
stgraber at ubuntu.com
Tue Nov 17 16:38:27 UTC 2015
On Wed, Nov 11, 2015 at 05:13:25PM +0000, Serge Hallyn wrote:
> Closes #694
>
> When we start cloning container c1 to c2, we first save c1's
> configuration in c2's as a starting point. We long ago cleared
> out the lxc.rootfs entry before saving it, so that if we are
> killed before we update the rootfs, c2's rootfs doesn't point
> to c1's. Because then lxc-destroy -n c2 would delete c1's rootfs.
>
> But when we introduced the unexpanded_config, we didn't update
> this code to clear the rootfs out of the unexpanded_config, which
> is what now actually gets saved in write_config().
>
> Do so.
>
> Signed-off-by: Serge Hallyn <serge.hallyn at ubuntu.com>
Acked-by: Stéphane Graber <stgraber at ubuntu.com>
> ---
> src/lxc/lxccontainer.c | 13 ++++++++++++-
> 1 file changed, 12 insertions(+), 1 deletion(-)
>
> diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c
> index 5207255..adc29c5 100644
> --- a/src/lxc/lxccontainer.c
> +++ b/src/lxc/lxccontainer.c
> @@ -3057,7 +3057,7 @@ static struct lxc_container *do_lxcapi_clone(struct lxc_container *c, const char
> struct lxc_container *c2 = NULL;
> char newpath[MAXPATHLEN];
> int ret, storage_copied = 0;
> - char *origroot = NULL;
> + char *origroot = NULL, *saved_unexp_conf = NULL;
> struct clone_update_data data;
> FILE *fout;
> pid_t pid;
> @@ -3104,9 +3104,20 @@ static struct lxc_container *do_lxcapi_clone(struct lxc_container *c, const char
> SYSERROR("open %s", newpath);
> goto out;
> }
> +
> + saved_unexp_conf = c->lxc_conf->unexpanded_config;
> + c->lxc_conf->unexpanded_config = strdup(saved_unexp_conf);
> + if (!c->lxc_conf->unexpanded_config) {
> + ERROR("Out of memory");
> + goto out;
> + }
> + clear_unexp_config_line(c->lxc_conf, "lxc.rootfs", false);
> write_config(fout, c->lxc_conf);
> fclose(fout);
> c->lxc_conf->rootfs.path = origroot;
> + free(c->lxc_conf->unexpanded_config);
> + c->lxc_conf->unexpanded_config = saved_unexp_conf;
> + saved_unexp_conf = NULL;
>
> sprintf(newpath, "%s/%s/rootfs", lxcpath, newname);
> if (mkdir(newpath, 0755) < 0) {
> --
> 2.5.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/20151117/87aed8b6/attachment.sig>
More information about the lxc-devel
mailing list