diff options
author | Ivana Varekova <varekova@redhat.com> | 2009-06-18 07:50:30 +0200 |
---|---|---|
committer | Dhaval Giani <dhaval@linux.vnet.ibm.com> | 2009-06-18 19:49:38 +0530 |
commit | d32491c49637e3c21f46048cc6c505eb41cbe3e0 (patch) | |
tree | c64a8b46f2a2fc7560a0a7a24c450bdc04527408 /src | |
parent | 5620d31b78fda7d5db0b85fcceca9c2cabe8f155 (diff) | |
download | libcg-d32491c49637e3c21f46048cc6c505eb41cbe3e0.tar.gz libcg-d32491c49637e3c21f46048cc6c505eb41cbe3e0.tar.xz libcg-d32491c49637e3c21f46048cc6c505eb41cbe3e0.zip |
Prevent to add multiple versions of the same controller to mount_table
This patche add a test to cgroup_init function, which prevent to add
multiple records for the same controller (this is a problem eg. in
cgroup_get_cgroup function - which looks to mount table and add all
relevant controllers using cgroup_add_controller function and when the
function calls cgroup_add_cgroup function twice on the same controller,
it returns error so the result is cgroup_get_cgroup failed).
Signed-off-by: Ivana Varekova <varekova@redhat.com>
Signed-off-by: Dhaval Giani <dhaval@linux.vnet.ibm.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/api.c | 18 |
1 files changed, 18 insertions, 0 deletions
@@ -566,6 +566,8 @@ int cgroup_init() char subsys_name[FILENAME_MAX]; int hierarchy, num_cgroups, enabled; int i=0; + int j; + int duplicate = 0; char *mntopt = NULL; int err; char *buf = NULL; @@ -644,6 +646,22 @@ int cgroup_init() continue; cgroup_dbg("matched %s:%s\n", mntopt, controllers[i]); + + /* do not have duplicates in mount table */ + duplicate = 0; + for (j = 0; j < found_mnt; j++) { + if (strncmp(mntopt, cg_mount_table[j].name, FILENAME_MAX) + == 0) { + duplicate = 1; + break; + } + } + if (duplicate) { + cgroup_dbg("controller %s is already mounted on %s\n", + mntopt, cg_mount_table[j].path); + continue; + } + strcpy(cg_mount_table[found_mnt].name, controllers[i]); strcpy(cg_mount_table[found_mnt].path, ent->mnt_dir); cgroup_dbg("Found cgroup option %s, count %d\n", |