return -1;
}
+ ret = cgroup_init();
+ if (ret) {
+ fprintf(stderr, "%s: libcgroup initialization failed: %s\n",
+ argv[0], cgroup_strerror(ret));
+ goto err;
+ }
+
error = cgroup_string_list_init(&cfg_files, argc/2);
if (error)
goto err;
if (!cgc) {
cgc = cgroup_add_controller(cg, controller.name);
if (!cgc) {
- ret = ECGCONTROLLERCREATEFAILED;
+ fprintf(stderr, "cgget: cannot find controller '%s'\n",
+ controller.name);
+ ret = ECGOTHER;
goto out;
}
}
if (!cgc) {
cgc = cgroup_add_controller(cg, cntl_value_controller);
if (!cgc) {
- ret = ECGCONTROLLERCREATEFAILED;
+ fprintf(stderr, "cgget: cannot find controller '%s'\n",
+ cntl_value_controller);
+ ret = ECGOTHER;
goto out;
}
}
if (!cgc) {
cgc = cgroup_add_controller(cg, ctrl_str);
if (!cgc) {
- ret = ECGCONTROLLERCREATEFAILED;
+ fprintf(stderr, "cgget: cannot find controller '%s'\n",
+ ctrl_str);
+ ret = ECGOTHER;
goto out;
}
}
if (!cgc) {
cgc = cgroup_add_controller(cg, controllers[i]);
if (!cgc) {
- ret = ECGCONTROLLERCREATEFAILED;
+ fprintf(stderr, "cgget: cannot find controller '%s'\n",
+ controllers[i]);
+ ret = ECGOTHER;
goto out;
}
}
struct cgroup_controller *cgroup_add_controller(struct cgroup *cgroup,
const char *name)
{
- int i;
+ int i, ret;
struct cgroup_controller *controller;
if (!cgroup)
controller->cgroup = cgroup;
controller->index = 0;
+ if (strcmp(controller->name, CGROUP_FILE_PREFIX) == 0) {
+ /*
+ * Operating on the "cgroup" controller is only allowed on
+ * cgroup v2 systems
+ */
+ controller->version = CGROUP_V2;
+ } else {
+ ret = cgroup_get_controller_version(controller->name,
+ &controller->version);
+ if (ret) {
+ cgroup_dbg("failed to get cgroup version for controller %s\n",
+ controller->name);
+ free(controller);
+ return NULL;
+ }
+ }
+
cgroup->controller[cgroup->index] = controller;
cgroup->index++;