Commit 39460be8 by Christian Brauner

set lxc.rootfs.backend on container creation

Since specifying lxc.rootfs.backend can lead to performance improvements we always set it during container creation. This also fixes a bug. do_bdev_create() tried to be smart and retrieve the lower directory when bdev->type == overlayfs or aufs thereby cutting the path. However, this operation is done in ovl_mount() and aufs_mount() and both functions need the full src path for this. The bug didn't show before because when creating a overlayfs container with e.g.: lxc-create -n c -t busybox -B overlayfs still left bdev->type set to dir and so the code for retrieving the lower dir in do_bdev_create() was skipped. But by setting lxc.rootfs.backend on container creation we force bdev->type to be set to e.g. overlayfs and the code gets executed thereby exposing the bug. Signed-off-by: 's avatarChristian Brauner <christian.brauner@mailbox.org>
parent a3ff5b56
...@@ -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);
......
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