X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fbasic%2Fcgroup-util.c;h=f96cd6339402e8182c32f00349dad11b2d704149;hp=ba9eeb92165eea79522bffaa60bf681c28fac1eb;hb=660d02b554b97fd4ce08d0a30d16487912687a13;hpb=1cfc78c91965df340cdde100ad6cb3ed50b28927 diff --git a/src/basic/cgroup-util.c b/src/basic/cgroup-util.c index ba9eeb921..f96cd6339 100644 --- a/src/basic/cgroup-util.c +++ b/src/basic/cgroup-util.c @@ -321,6 +321,14 @@ int cg_migrate(const char *cfrom, const char *pfrom, const char *cto, const char if (set_get(s, LONG_TO_PTR(pid)) == LONG_TO_PTR(pid)) continue; + /* Ignore kernel threads. Since they can only + * exist in the root cgroup, we only check for + * them there. */ + if (cfrom && + (isempty(pfrom) || path_equal(pfrom, "/")) && + is_kernel_thread(pid) > 0) + continue; + r = cg_attach(cto, pto, pid); if (r < 0) { if (ret >= 0 && r != -ESRCH) @@ -615,6 +623,8 @@ int cg_create(const char *controller, const char *path) { return 1; } +/// UNNEEDED by elogind +#if 0 int cg_create_and_attach(const char *controller, const char *path, pid_t pid) { int r, q; @@ -631,6 +641,7 @@ int cg_create_and_attach(const char *controller, const char *path, pid_t pid) { /* This does not remove the cgroup on failure */ return r; } +#endif // 0 int cg_attach(const char *controller, const char *path, pid_t pid) { _cleanup_free_ char *fs = NULL; @@ -676,6 +687,8 @@ int cg_attach_fallback(const char *controller, const char *path, pid_t pid) { return 0; } +/// UNNEEDED by elogind +#if 0 int cg_set_group_access( const char *controller, const char *path, @@ -732,6 +745,7 @@ int cg_set_task_access( return chmod_and_chown(procs, mode, uid, gid); } +#endif // 0 int cg_pid_get_path(const char *controller, pid_t pid, char **path) { _cleanup_fclose_ FILE *f = NULL; @@ -748,7 +762,7 @@ int cg_pid_get_path(const char *controller, pid_t pid, char **path) { controller = normalize_controller(controller); } else - controller = SYSTEMD_CGROUP_CONTROLLER; + controller = ELOGIND_CGROUP_CONTROLLER; fs = procfs_file_alloca(pid, "cgroup"); @@ -806,6 +820,8 @@ int cg_pid_get_path(const char *controller, pid_t pid, char **path) { return -ENOENT; } +/// UNNEEDED by elogind +#if 0 int cg_install_release_agent(const char *controller, const char *agent) { _cleanup_free_ char *fs = NULL, *contents = NULL; char *sc; @@ -829,14 +845,12 @@ int cg_install_release_agent(const char *controller, const char *agent) { } else if (!streq(sc, agent)) return -EEXIST; - free(fs); - fs = NULL; + fs = mfree(fs); r = cg_get_path(controller, NULL, "notify_on_release", &fs); if (r < 0) return r; - free(contents); - contents = NULL; + contents = mfree(contents); r = read_one_line_file(fs, &contents); if (r < 0) return r; @@ -868,8 +882,7 @@ int cg_uninstall_release_agent(const char *controller) { if (r < 0) return r; - free(fs); - fs = NULL; + fs = mfree(fs); r = cg_get_path(controller, NULL, "release_agent", &fs); if (r < 0) @@ -881,6 +894,7 @@ int cg_uninstall_release_agent(const char *controller) { return 0; } +#endif // 0 int cg_is_empty(const char *controller, const char *path, bool ignore_self) { _cleanup_fclose_ FILE *f = NULL; @@ -1060,7 +1074,7 @@ int cg_mangle_path(const char *path, char **result) { if (r < 0) return r; - return cg_get_path(c ? c : SYSTEMD_CGROUP_CONTROLLER, p ? p : "/", NULL, result); + return cg_get_path(c ? c : ELOGIND_CGROUP_CONTROLLER, p ? p : "/", NULL, result); } int cg_get_root_path(char **path) { @@ -1069,7 +1083,7 @@ int cg_get_root_path(char **path) { assert(path); - r = cg_pid_get_path(SYSTEMD_CGROUP_CONTROLLER, 1, &p); + r = cg_pid_get_path(ELOGIND_CGROUP_CONTROLLER, 1, &p); if (r < 0) return r; @@ -1117,7 +1131,7 @@ int cg_pid_get_path_shifted(pid_t pid, const char *root, char **cgroup) { assert(pid >= 0); assert(cgroup); - r = cg_pid_get_path(SYSTEMD_CGROUP_CONTROLLER, pid, &raw); + r = cg_pid_get_path(ELOGIND_CGROUP_CONTROLLER, pid, &raw); if (r < 0) return r; @@ -1351,8 +1365,6 @@ int cg_path_get_user_unit(const char *path, char **ret) { return cg_path_get_unit(t, ret); } -/// UNNEDED by elogind -#if 0 int cg_pid_get_user_unit(pid_t pid, char **unit) { _cleanup_free_ char *cgroup = NULL; int r; @@ -1365,7 +1377,6 @@ int cg_pid_get_user_unit(pid_t pid, char **unit) { return cg_path_get_user_unit(cgroup, unit); } -#endif // 0 int cg_path_get_machine_name(const char *path, char **machine) { _cleanup_free_ char *u = NULL, *sl = NULL; @@ -1382,8 +1393,6 @@ int cg_path_get_machine_name(const char *path, char **machine) { return readlink_malloc(sl, machine); } -/// UNNEDED by elogind -#if 0 int cg_pid_get_machine_name(pid_t pid, char **machine) { _cleanup_free_ char *cgroup = NULL; int r; @@ -1396,7 +1405,6 @@ int cg_pid_get_machine_name(pid_t pid, char **machine) { return cg_path_get_machine_name(cgroup, machine); } -#endif // 0 int cg_path_get_session(const char *path, char **session) { _cleanup_free_ char *unit = NULL; @@ -1469,8 +1477,6 @@ int cg_path_get_owner_uid(const char *path, uid_t *uid) { return 0; } -/// UNNEDED by elogind -#if 0 int cg_pid_get_owner_uid(pid_t pid, uid_t *uid) { _cleanup_free_ char *cgroup = NULL; int r; @@ -1481,7 +1487,6 @@ int cg_pid_get_owner_uid(pid_t pid, uid_t *uid) { return cg_path_get_owner_uid(cgroup, uid); } -#endif // 0 int cg_path_get_slice(const char *p, char **slice) { const char *e = NULL; @@ -1713,7 +1718,6 @@ int cg_slice_to_path(const char *unit, char **ret) { return 0; } -#endif // 0 int cg_set_attribute(const char *controller, const char *path, const char *attribute, const char *value) { _cleanup_free_ char *p = NULL; @@ -1736,6 +1740,7 @@ int cg_get_attribute(const char *controller, const char *path, const char *attri return read_one_line_file(p, ret); } +#endif // 0 static const char mask_names[] = "cpu\0" @@ -1744,6 +1749,8 @@ static const char mask_names[] = "memory\0" "devices\0"; +/// UNNEEDED by elogind +#if 0 int cg_create_everywhere(CGroupControllerMask supported, CGroupControllerMask mask, const char *path) { CGroupControllerMask bit = 1; const char *n; @@ -1754,7 +1761,7 @@ int cg_create_everywhere(CGroupControllerMask supported, CGroupControllerMask ma * in all others */ /* First create the cgroup in our own hierarchy. */ - r = cg_create(SYSTEMD_CGROUP_CONTROLLER, path); + r = cg_create(ELOGIND_CGROUP_CONTROLLER, path); if (r < 0) return r; @@ -1770,13 +1777,14 @@ int cg_create_everywhere(CGroupControllerMask supported, CGroupControllerMask ma return 0; } +#endif // 0 int cg_attach_everywhere(CGroupControllerMask supported, const char *path, pid_t pid, cg_migrate_callback_t path_callback, void *userdata) { CGroupControllerMask bit = 1; const char *n; int r; - r = cg_attach(SYSTEMD_CGROUP_CONTROLLER, path, pid); + r = cg_attach(ELOGIND_CGROUP_CONTROLLER, path, pid); if (r < 0) return r; @@ -1800,6 +1808,8 @@ int cg_attach_everywhere(CGroupControllerMask supported, const char *path, pid_t return 0; } +/// UNNEEDED by elogind +#if 0 int cg_attach_many_everywhere(CGroupControllerMask supported, const char *path, Set* pids, cg_migrate_callback_t path_callback, void *userdata) { Iterator i; void *pidp; @@ -1823,7 +1833,7 @@ int cg_migrate_everywhere(CGroupControllerMask supported, const char *from, cons int r; if (!path_equal(from, to)) { - r = cg_migrate_recursive(SYSTEMD_CGROUP_CONTROLLER, from, SYSTEMD_CGROUP_CONTROLLER, to, false, true); + r = cg_migrate_recursive(ELOGIND_CGROUP_CONTROLLER, from, ELOGIND_CGROUP_CONTROLLER, to, false, true); if (r < 0) return r; } @@ -1838,7 +1848,7 @@ int cg_migrate_everywhere(CGroupControllerMask supported, const char *from, cons if (!p) p = to; - cg_migrate_recursive_fallback(SYSTEMD_CGROUP_CONTROLLER, to, n, p, false, false); + cg_migrate_recursive_fallback(ELOGIND_CGROUP_CONTROLLER, to, n, p, false, false); } bit <<= 1; @@ -1852,7 +1862,7 @@ int cg_trim_everywhere(CGroupControllerMask supported, const char *path, bool de const char *n; int r; - r = cg_trim(SYSTEMD_CGROUP_CONTROLLER, path, delete_root); + r = cg_trim(ELOGIND_CGROUP_CONTROLLER, path, delete_root); if (r < 0) return r; @@ -1930,3 +1940,4 @@ int cg_kernel_controllers(Set *controllers) { return 0; } +#endif // 0