]> git.ipfire.org Git - thirdparty/lxc.git/commitdiff
place nscgroup path in lxc_handler
authorMichel Normand <normand@fr.ibm.com>
Fri, 9 Oct 2009 09:38:39 +0000 (11:38 +0200)
committerDaniel Lezcano <dlezcano@fr.ibm.com>
Fri, 9 Oct 2009 09:38:39 +0000 (11:38 +0200)
this also avoid to call two times get_cgroup_mount

Signed-off-by: Michel Normand <normand@fr.ibm.com>
Signed-off-by: Daniel Lezcano <dlezcano@fr.ibm.com>
src/lxc/cgroup.c
src/lxc/cgroup.h
src/lxc/start.c
src/lxc/start.h

index 3711eee65c15f94e8b540b53022648efc7bbbf81..57db734833ce7213d617e30f6d8855bdc3900b2b 100644 (file)
@@ -81,10 +81,10 @@ out:
         return err;
 }
 
-int lxc_rename_nsgroup(const char *name, pid_t pid)
+int lxc_rename_nsgroup(const char *name, struct lxc_handler *handler)
 {
        char oldname[MAXPATHLEN];
-       char newname[MAXPATHLEN];
+       char *newname = handler->nsgroup;
        char cgroup[MAXPATHLEN];
        int ret;
 
@@ -93,7 +93,7 @@ int lxc_rename_nsgroup(const char *name, pid_t pid)
                return -1;
        }
 
-       snprintf(oldname, MAXPATHLEN, "%s/%d", cgroup, pid);
+       snprintf(oldname, MAXPATHLEN, "%s/%d", cgroup, handler->pid);
        snprintf(newname, MAXPATHLEN, "%s/%s", cgroup, name);
 
        /* there is a previous cgroup, assume it is empty, otherwise
@@ -113,23 +113,16 @@ int lxc_rename_nsgroup(const char *name, pid_t pid)
        else
                DEBUG("'%s' renamed to '%s'", oldname, newname);
 
+
        return ret;
 }
 
-int lxc_link_nsgroup(const char *name)
+int lxc_link_nsgroup(const char *name, const char *nsgroup)
 {
        char lxc[MAXPATHLEN];
-       char nsgroup[MAXPATHLEN];
-       char cgroup[MAXPATHLEN];
        int ret;
 
-       if (get_cgroup_mount(MTAB, cgroup)) {
-               ERROR("cgroup is not mounted");
-               return -1;
-       }
-
        snprintf(lxc, MAXPATHLEN, LXCPATH "/%s/nsgroup", name);
-       snprintf(nsgroup, MAXPATHLEN, "%s/%s", cgroup, name);
 
        unlink(lxc);
        ret = symlink(nsgroup, lxc);
index ad9802ec22e2b7a46b7ac4134adcf0916a7a86c2..686324786788799a6c7be03d3e9612b892c615c5 100644 (file)
 
 #define MAXPRIOLEN 24
 
+struct lxc_handler;
 int lxc_get_cgroup_mount(const char *mtab, char *mnt);
-int lxc_rename_nsgroup(const char *name, pid_t pid);
-int lxc_link_nsgroup(const char *name);
+int lxc_rename_nsgroup(const char *name, struct lxc_handler *handler);
+int lxc_link_nsgroup(const char *name, const char *nsgroup);
 int lxc_unlink_nsgroup(const char *name);
 
 #endif
index 2e648b7307f4481dc26dfd42a3468cfd9bc9e258..1e2a28f0b6ccbe672cac819127b7d6794307a8c6 100644 (file)
@@ -424,7 +424,8 @@ int lxc_spawn(const char *name, struct lxc_handler *handler, char *const argv[])
                goto out_abort;
        }
 
-       if (lxc_rename_nsgroup(name, handler->pid) || lxc_link_nsgroup(name))
+       if (lxc_rename_nsgroup(name, handler) ||
+           lxc_link_nsgroup(name, handler->nsgroup))
                goto out_abort;
 
        /* Create the network configuration */
index a2ab313774a0a30fd34c77dfaaeff83be96ef2ed..bb86f404aaf91ab42b4207425deea8d0dc666f55 100644 (file)
@@ -29,6 +29,7 @@ struct lxc_handler {
        int sigfd;
        int lock;
        char tty[MAXPATHLEN];
+       char nsgroup[MAXPATHLEN];
        sigset_t oldmask;
        struct lxc_tty_info tty_info;
 };