*/
if (!found_mnt)
ret = ECGROUPNOTMOUNTED;
- if (found_mnt > 1)
+ else if (found_mnt > 1)
ret = ECGROUPMULTIMOUNTED;
else {
/*
* 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;
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)) {
}
}
- 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;
*
* 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;
del_open_err:
fclose(base_tasks);
base_open_err:
- if (force) {
+ if (ignore_migration) {
cg_build_path(cgroup->name, path);
error = rmdir(path);
}
int cg_init(void);
int cg_attach_task(struct cgroup *cgroup);
int cg_modify_cgroup(struct cgroup *cgroup);
-int cg_create_cgroup(struct cgroup *cgroup);
-int cg_delete_cgroup(struct cgroup *cgroup, int force);
+int cg_create_cgroup(struct cgroup *cgroup, int ignore_ownership);
+int cg_delete_cgroup(struct cgroup *cgroup, int ignore_migration);
__END_DECLS