diff options
author | Balbir Singh <balbir@linux.vnet.ibm.com> | 2008-04-16 10:53:55 +0000 |
---|---|---|
committer | Balbir Singh <balbir@linux.vnet.ibm.com> | 2008-04-16 10:53:55 +0000 |
commit | 1603195881d3d7902a24cca1861f5808d50202db (patch) | |
tree | a3af57c292d90b62100257e27114e88083ab1cd7 /api.c | |
parent | 852880eff7be980c5bd4c86e8451a4e120a054a7 (diff) | |
download | libcg-1603195881d3d7902a24cca1861f5808d50202db.tar.gz libcg-1603195881d3d7902a24cca1861f5808d50202db.tar.xz libcg-1603195881d3d7902a24cca1861f5808d50202db.zip |
api.c | 23 +++++++++++++++--------
libcg.h | 4 ++--
tests/libcg_ba.cpp | 2 +-
Added additional parameters for create and destroy cgroup. Fixed a cg_init
segfault (faulty, if-else check)
Signed-off-by: Balbir Singh <balbir@linux.vnet.ibm.com>
git-svn-id: https://libcg.svn.sourceforge.net/svnroot/libcg/branches/balbir@15 4f4bb910-9a46-0410-90c8-c897d4f1cd53
Diffstat (limited to 'api.c')
-rw-r--r-- | api.c | 23 |
1 files changed, 15 insertions, 8 deletions
@@ -121,7 +121,7 @@ int cg_init() */ if (!found_mnt) ret = ECGROUPNOTMOUNTED; - if (found_mnt > 1) + else if (found_mnt > 1) ret = ECGROUPMULTIMOUNTED; else { /* @@ -340,7 +340,7 @@ err: * returns 0 on success. We recommend calling cg_delete_cgroup * if this routine fails. That should do the cleanup operation. */ -int cg_create_cgroup(struct cgroup *cgroup) +int cg_create_cgroup(struct cgroup *cgroup, int ignore_ownership) { char *fts_path[2], base[FILENAME_MAX], *path; int i; @@ -359,7 +359,12 @@ int cg_create_cgroup(struct cgroup *cgroup) strcpy(base, path); - cg_chown_recursive(fts_path, cgroup->control_uid, cgroup->control_gid); + if (!ignore_ownership) + error = cg_chown_recursive(fts_path, cgroup->control_uid, + cgroup->control_gid); + + if (error) + goto err; for (i = 0; i < CG_CONTROLLER_MAX && cgroup->controller[i]; i++, strcpy(path, base)) { @@ -378,9 +383,11 @@ int cg_create_cgroup(struct cgroup *cgroup) } } - strcpy(path, base); - strcat(path, "/tasks"); - chown(path, cgroup->tasks_uid, cgroup->tasks_gid); + if (!ignore_ownership) { + strcpy(path, base); + strcat(path, "/tasks"); + chown(path, cgroup->tasks_uid, cgroup->tasks_gid); + } err: free(path); return error; @@ -391,7 +398,7 @@ err: * * returns 0 on success. */ -int cg_delete_cgroup(struct cgroup *cgroup, int force) +int cg_delete_cgroup(struct cgroup *cgroup, int ignore_migration) { FILE *delete_tasks, *base_tasks; int tids; @@ -424,7 +431,7 @@ int cg_delete_cgroup(struct cgroup *cgroup, int force) del_open_err: fclose(base_tasks); base_open_err: - if (force) { + if (ignore_migration) { cg_build_path(cgroup->name, path); error = rmdir(path); } |