From: Mike Yuan Date: Tue, 30 Jul 2024 14:15:59 +0000 (+0200) Subject: cgroup-setup: move cg_{,un}install_release_agent from cgroup-util X-Git-Tag: v257-rc1~753^2~10 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ea25672de5a22241b068050f812d61501de5f1a9;p=thirdparty%2Fsystemd.git cgroup-setup: move cg_{,un}install_release_agent from cgroup-util They're pid1-specific, so move them out of basic/. --- diff --git a/src/basic/cgroup-util.c b/src/basic/cgroup-util.c index ffce7504f4e..5a2636841e9 100644 --- a/src/basic/cgroup-util.c +++ b/src/basic/cgroup-util.c @@ -870,91 +870,6 @@ int cg_pidref_get_path(const char *controller, const PidRef *pidref, char **ret_ return 0; } -int cg_install_release_agent(const char *controller, const char *agent) { - _cleanup_free_ char *fs = NULL, *contents = NULL; - const char *sc; - int r; - - assert(agent); - - r = cg_unified_controller(controller); - if (r < 0) - return r; - if (r > 0) /* doesn't apply to unified hierarchy */ - return -EOPNOTSUPP; - - r = cg_get_path(controller, NULL, "release_agent", &fs); - if (r < 0) - return r; - - r = read_one_line_file(fs, &contents); - if (r < 0) - return r; - - sc = strstrip(contents); - if (isempty(sc)) { - r = write_string_file(fs, agent, WRITE_STRING_FILE_DISABLE_BUFFER); - if (r < 0) - return r; - } else if (!path_equal(sc, agent)) - return -EEXIST; - - fs = mfree(fs); - r = cg_get_path(controller, NULL, "notify_on_release", &fs); - if (r < 0) - return r; - - contents = mfree(contents); - r = read_one_line_file(fs, &contents); - if (r < 0) - return r; - - sc = strstrip(contents); - if (streq(sc, "0")) { - r = write_string_file(fs, "1", WRITE_STRING_FILE_DISABLE_BUFFER); - if (r < 0) - return r; - - return 1; - } - - if (!streq(sc, "1")) - return -EIO; - - return 0; -} - -int cg_uninstall_release_agent(const char *controller) { - _cleanup_free_ char *fs = NULL; - int r; - - r = cg_unified_controller(controller); - if (r < 0) - return r; - if (r > 0) /* Doesn't apply to unified hierarchy */ - return -EOPNOTSUPP; - - r = cg_get_path(controller, NULL, "notify_on_release", &fs); - if (r < 0) - return r; - - r = write_string_file(fs, "0", WRITE_STRING_FILE_DISABLE_BUFFER); - if (r < 0) - return r; - - fs = mfree(fs); - - r = cg_get_path(controller, NULL, "release_agent", &fs); - if (r < 0) - return r; - - r = write_string_file(fs, "", WRITE_STRING_FILE_DISABLE_BUFFER); - if (r < 0) - return r; - - return 0; -} - int cg_is_empty(const char *controller, const char *path) { _cleanup_fclose_ FILE *f = NULL; pid_t pid; diff --git a/src/basic/cgroup-util.h b/src/basic/cgroup-util.h index 28c11ef3e26..5449d388948 100644 --- a/src/basic/cgroup-util.h +++ b/src/basic/cgroup-util.h @@ -263,9 +263,6 @@ int cg_get_xattr_malloc(const char *path, const char *name, char **ret); int cg_get_xattr_bool(const char *path, const char *name); int cg_remove_xattr(const char *path, const char *name); -int cg_install_release_agent(const char *controller, const char *agent); -int cg_uninstall_release_agent(const char *controller); - int cg_is_empty(const char *controller, const char *path); int cg_is_empty_recursive(const char *controller, const char *path); diff --git a/src/core/main.c b/src/core/main.c index 078b968ae4d..4c92d81c402 100644 --- a/src/core/main.c +++ b/src/core/main.c @@ -27,6 +27,7 @@ #include "bus-error.h" #include "bus-util.h" #include "capability-util.h" +#include "cgroup-setup.h" #include "cgroup-util.h" #include "chase.h" #include "clock-util.h" diff --git a/src/shared/cgroup-setup.c b/src/shared/cgroup-setup.c index c89c2c1d401..d7e27a18379 100644 --- a/src/shared/cgroup-setup.c +++ b/src/shared/cgroup-setup.c @@ -1011,3 +1011,88 @@ int cg_trim_v1_controllers(CGroupMask supported, CGroupMask mask, const char *pa return r; } + +int cg_install_release_agent(const char *controller, const char *agent) { + _cleanup_free_ char *fs = NULL, *contents = NULL; + const char *sc; + int r; + + assert(agent); + + r = cg_unified_controller(controller); + if (r < 0) + return r; + if (r > 0) /* doesn't apply to unified hierarchy */ + return -EOPNOTSUPP; + + r = cg_get_path(controller, NULL, "release_agent", &fs); + if (r < 0) + return r; + + r = read_one_line_file(fs, &contents); + if (r < 0) + return r; + + sc = strstrip(contents); + if (isempty(sc)) { + r = write_string_file(fs, agent, WRITE_STRING_FILE_DISABLE_BUFFER); + if (r < 0) + return r; + } else if (!path_equal(sc, agent)) + return -EEXIST; + + fs = mfree(fs); + r = cg_get_path(controller, NULL, "notify_on_release", &fs); + if (r < 0) + return r; + + contents = mfree(contents); + r = read_one_line_file(fs, &contents); + if (r < 0) + return r; + + sc = strstrip(contents); + if (streq(sc, "0")) { + r = write_string_file(fs, "1", WRITE_STRING_FILE_DISABLE_BUFFER); + if (r < 0) + return r; + + return 1; + } + + if (!streq(sc, "1")) + return -EIO; + + return 0; +} + +int cg_uninstall_release_agent(const char *controller) { + _cleanup_free_ char *fs = NULL; + int r; + + r = cg_unified_controller(controller); + if (r < 0) + return r; + if (r > 0) /* Doesn't apply to unified hierarchy */ + return -EOPNOTSUPP; + + r = cg_get_path(controller, NULL, "notify_on_release", &fs); + if (r < 0) + return r; + + r = write_string_file(fs, "0", WRITE_STRING_FILE_DISABLE_BUFFER); + if (r < 0) + return r; + + fs = mfree(fs); + + r = cg_get_path(controller, NULL, "release_agent", &fs); + if (r < 0) + return r; + + r = write_string_file(fs, "", WRITE_STRING_FILE_DISABLE_BUFFER); + if (r < 0) + return r; + + return 0; +} diff --git a/src/shared/cgroup-setup.h b/src/shared/cgroup-setup.h index d5ded0eaaeb..b8473097cf5 100644 --- a/src/shared/cgroup-setup.h +++ b/src/shared/cgroup-setup.h @@ -42,3 +42,6 @@ int cg_migrate_recursive(const char *cfrom, const char *pfrom, const char *cto, int cg_migrate_recursive_fallback(const char *cfrom, const char *pfrom, const char *cto, const char *pto, CGroupFlags flags); int cg_migrate_v1_controllers(CGroupMask supported, CGroupMask mask, const char *from, cg_migrate_callback_t to_callback, void *userdata); int cg_trim_v1_controllers(CGroupMask supported, CGroupMask mask, const char *path, bool delete_root); + +int cg_install_release_agent(const char *controller, const char *agent); +int cg_uninstall_release_agent(const char *controller);