]> git.ipfire.org Git - thirdparty/lxc.git/commitdiff
new lxc_cgroup_path_get function
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)
remove the usage of LXCPATH/<name>/nsgroup
in get/set function.

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

index 57db734833ce7213d617e30f6d8855bdc3900b2b..072292a319f0481214e3dbdd792e1b8154deef2d 100644 (file)
@@ -45,6 +45,8 @@ lxc_log_define(lxc_cgroup, lxc);
 
 #define MTAB "/etc/mtab"
 
+static char nsgroup_path[MAXPATHLEN];
+
 static int get_cgroup_mount(const char *mtab, char *mnt)
 {
         struct mntent *mntent;
@@ -153,12 +155,38 @@ int lxc_unlink_nsgroup(const char *name)
        return unlink(nsgroup);
 }
 
+static int lxc_cgroup_path_get(char **path, const char *name)
+{
+       char cgroup[MAXPATHLEN];
+
+       *path = &nsgroup_path[0];
+
+       /*
+        * report nsgroup_path string if already set
+        */
+       if (**path != 0)
+               return 0;
+
+       if (get_cgroup_mount(MTAB, cgroup)) {
+               ERROR("cgroup is not mounted");
+               return -1;
+       }
+
+       snprintf(nsgroup_path, MAXPATHLEN, "%s/%s", cgroup, name);
+       return 0;
+}
+
 int lxc_cgroup_set(const char *name, const char *subsystem, const char *value)
 {
        int fd, ret = -1;
+       char *nsgroup;
        char path[MAXPATHLEN];
 
-        snprintf(path, MAXPATHLEN, LXCPATH "/%s/nsgroup/%s", name, subsystem);
+       ret = lxc_cgroup_path_get(&nsgroup, name);
+       if (ret)
+               return -1;
+
+        snprintf(path, MAXPATHLEN, "%s/%s", nsgroup, subsystem);
 
        fd = open(path, O_WRONLY);
        if (fd < 0) {
@@ -181,9 +209,14 @@ int lxc_cgroup_get(const char *name, const char *subsystem,
                   char *value, size_t len)
 {
        int fd, ret = -1;
+       char *nsgroup;
        char path[MAXPATHLEN];
 
-        snprintf(path, MAXPATHLEN, LXCPATH "/%s/nsgroup/%s", name, subsystem);
+       ret = lxc_cgroup_path_get(&nsgroup, name);
+       if (ret)
+               return -1;
+
+        snprintf(path, MAXPATHLEN, "%s/%s", nsgroup, subsystem);
 
        fd = open(path, O_RDONLY);
        if (fd < 0) {