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 <dlezc...@fr.ibm.com>
---
 src/lxc/conf.c |   28 +++++++++++++++++++++-------
 1 files changed, 21 insertions(+), 7 deletions(-)

diff --git a/src/lxc/conf.c b/src/lxc/conf.c
index 8cb8e20..aae52f4 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;
        }
-- 
1.7.0.4


------------------------------------------------------------------------------
Virtualization is moving to the mainstream and overtaking non-virtualized
environment for deploying applications. Does it make network security 
easier or more difficult to achieve? Read this whitepaper to separate the 
two and get a better understanding.
http://p.sf.net/sfu/hp-phase2-d2d
_______________________________________________
Lxc-devel mailing list
Lxc-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/lxc-devel

Reply via email to