From: Daniel Lezcano Date: Sun, 3 Oct 2010 21:09:35 +0000 (+0200) Subject: mount the rootfs to the mount directory first X-Git-Tag: lxc-0.7.3~18 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ac7787080cb77e0532c1ac27fe106873628f494f;p=thirdparty%2Flxc.git mount the rootfs to the mount directory first Split the rootfs setup by mounting the rootfs to the mount point. This mount point will be used as the facto place where the rootfs is placed. Signed-off-by: Daniel Lezcano --- diff --git a/src/lxc/conf.c b/src/lxc/conf.c index 8cb8e2050..aae52f458 100644 --- a/src/lxc/conf.c +++ b/src/lxc/conf.c @@ -593,14 +593,11 @@ static int setup_rootfs_pivot_root(const char *rootfs, const char *pivotdir) static int setup_rootfs(const struct lxc_rootfs *rootfs) { - char *mpath = LXCROOTFSMOUNT; + char *mpath = rootfs->mount ? rootfs->mount : LXCROOTFSMOUNT; if (!rootfs->path) return 0; - if (rootfs->mount) - mpath = rootfs->mount; - if (access(mpath, F_OK)) { SYSERROR("failed to access to '%s', check it is present", mpath); @@ -614,11 +611,23 @@ static int setup_rootfs(const struct lxc_rootfs *rootfs) DEBUG("mounted '%s' on '%s'", rootfs->path, mpath); + return 0; +} + +int setup_pivot_root(const struct lxc_rootfs *rootfs) +{ + char *mpath = rootfs->mount ? rootfs->mount : LXCROOTFSMOUNT; + + if (!rootfs->path) + return 0; + if (setup_rootfs_pivot_root(mpath, rootfs->pivot)) { ERROR("failed to setup pivot root"); return -1; } + DEBUG("pivot rooted to '%s'", mpath); + return 0; } @@ -1457,8 +1466,8 @@ int lxc_setup(const char *name, struct lxc_conf *lxc_conf) return -1; } - if (setup_cgroup(name, &lxc_conf->cgroup)) { - ERROR("failed to setup the cgroups for '%s'", name); + if (setup_rootfs(&lxc_conf->rootfs)) { + ERROR("failed to setup rootfs for '%s'", name); return -1; } @@ -1472,6 +1481,11 @@ int lxc_setup(const char *name, struct lxc_conf *lxc_conf) return -1; } + if (setup_cgroup(name, &lxc_conf->cgroup)) { + ERROR("failed to setup the cgroups for '%s'", name); + return -1; + } + if (setup_console(&lxc_conf->rootfs, &lxc_conf->console)) { ERROR("failed to setup the console for '%s'", name); return -1; @@ -1482,7 +1496,7 @@ int lxc_setup(const char *name, struct lxc_conf *lxc_conf) return -1; } - if (setup_rootfs(&lxc_conf->rootfs)) { + if (setup_pivot_root(&lxc_conf->rootfs)) { ERROR("failed to set rootfs for '%s'", name); return -1; }