Commit bd08898f by Serge Hallyn

Merge pull request #945 from brauner/bugfix_branch

set lxc.rootfs.backend on container creation
parents a3ff5b56 8869eb5f
...@@ -1037,6 +1037,7 @@ static struct bdev *do_bdev_create(struct lxc_container *c, const char *type, ...@@ -1037,6 +1037,7 @@ static struct bdev *do_bdev_create(struct lxc_container *c, const char *type,
} }
do_lxcapi_set_config_item(c, "lxc.rootfs", bdev->src); do_lxcapi_set_config_item(c, "lxc.rootfs", bdev->src);
do_lxcapi_set_config_item(c, "lxc.rootfs.backend", bdev->type);
/* if we are not root, chown the rootfs dir to root in the /* if we are not root, chown the rootfs dir to root in the
* target uidmap */ * target uidmap */
...@@ -1076,7 +1077,7 @@ static bool create_run_template(struct lxc_container *c, char *tpath, bool need_ ...@@ -1076,7 +1077,7 @@ static bool create_run_template(struct lxc_container *c, char *tpath, bool need_
} }
if (pid == 0) { // child if (pid == 0) { // child
char *patharg, *namearg, *rootfsarg, *src; char *patharg, *namearg, *rootfsarg;
struct bdev *bdev = NULL; struct bdev *bdev = NULL;
int i; int i;
int ret, len, nargs = 0; int ret, len, nargs = 0;
...@@ -1087,18 +1088,7 @@ static bool create_run_template(struct lxc_container *c, char *tpath, bool need_ ...@@ -1087,18 +1088,7 @@ static bool create_run_template(struct lxc_container *c, char *tpath, bool need_
exit(1); exit(1);
} }
src = c->lxc_conf->rootfs.path; bdev = bdev_init(c->lxc_conf, c->lxc_conf->rootfs.path, c->lxc_conf->rootfs.mount, NULL);
/*
* for an overlay create, what the user wants is the template to fill
* in what will become the readonly lower layer. So don't mount for
* the template
*/
if (strncmp(src, "overlayfs:", 10) == 0)
src = ovl_getlower(src+10);
if (strncmp(src, "aufs:", 5) == 0)
src = ovl_getlower(src+5);
bdev = bdev_init(c->lxc_conf, src, c->lxc_conf->rootfs.mount, NULL);
if (!bdev) { if (!bdev) {
ERROR("Error opening rootfs"); ERROR("Error opening rootfs");
exit(1); exit(1);
...@@ -2855,6 +2845,8 @@ static int copy_storage(struct lxc_container *c0, struct lxc_container *c, ...@@ -2855,6 +2845,8 @@ static int copy_storage(struct lxc_container *c0, struct lxc_container *c,
} }
free(c->lxc_conf->rootfs.path); free(c->lxc_conf->rootfs.path);
c->lxc_conf->rootfs.path = strdup(bdev->src); c->lxc_conf->rootfs.path = strdup(bdev->src);
free(c->lxc_conf->rootfs.bdev_type);
c->lxc_conf->rootfs.bdev_type = strdup(bdev->type);
bdev_put(bdev); bdev_put(bdev);
if (!c->lxc_conf->rootfs.path) { if (!c->lxc_conf->rootfs.path) {
ERROR("Out of memory while setting storage path"); ERROR("Out of memory while setting storage path");
...@@ -2866,6 +2858,11 @@ static int copy_storage(struct lxc_container *c0, struct lxc_container *c, ...@@ -2866,6 +2858,11 @@ static int copy_storage(struct lxc_container *c0, struct lxc_container *c,
ERROR("Error saving new rootfs to cloned config"); ERROR("Error saving new rootfs to cloned config");
return -1; return -1;
} }
clear_unexp_config_line(c->lxc_conf, "lxc.rootfs.backend", false);
if (!do_append_unexp_config_line(c->lxc_conf, "lxc.rootfs.backend", c->lxc_conf->rootfs.bdev_type)) {
ERROR("Error saving new rootfs to cloned config");
return -1;
}
if (flags & LXC_CLONE_SNAPSHOT) if (flags & LXC_CLONE_SNAPSHOT)
copy_rdepends(c, c0); copy_rdepends(c, c0);
if (need_rdep) { if (need_rdep) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment