From: Michael Tremer Date: Wed, 31 Mar 2021 17:16:16 +0000 (+0000) Subject: cgroups: Add function to set nice level X-Git-Tag: 0.9.28~1285^2~449 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=820c32c74e20017e5eaf3507f14e3a7523fa998c;p=pakfire.git cgroups: Add function to set nice level Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/cgroup.c b/src/libpakfire/cgroup.c index c57e68a58..4a582b549 100644 --- a/src/libpakfire/cgroup.c +++ b/src/libpakfire/cgroup.c @@ -183,7 +183,7 @@ static FILE* pakfire_cgroup_fopen(Pakfire pakfire, static int pakfire_cgroup_fprintf(Pakfire pakfire, const char* group, const char* file, const char* format, ...) { char buffer[64]; - size_t length; + ssize_t length; int r; va_list args; @@ -200,6 +200,10 @@ static int pakfire_cgroup_fprintf(Pakfire pakfire, // if the operation was successful. r = write(fileno(f), buffer, length); + // Return zero if everything was written correctly + if (r == length) + r = 0; + fclose(f); return r; @@ -490,3 +494,16 @@ int pakfire_cgroup_cpustat(Pakfire pakfire, const char* group, return 0; } + +int pakfire_cgroup_set_nice(Pakfire pakfire, const char* group, int level) { + DEBUG(pakfire, "Setting nice level of cgroup %s to %d\n", group, level); + + int r = pakfire_cgroup_fprintf(pakfire, group, "cpu.weight.nice", "%d", level); + if (r) { + ERROR(pakfire, "Could not change nice level of cgroup %s: %s\n", + group, strerror(errno)); + return r; + } + + return 0; +} diff --git a/src/libpakfire/include/pakfire/cgroup.h b/src/libpakfire/include/pakfire/cgroup.h index 3ac6d4418..df8fb4d2d 100644 --- a/src/libpakfire/include/pakfire/cgroup.h +++ b/src/libpakfire/include/pakfire/cgroup.h @@ -52,6 +52,8 @@ struct pakfire_cgroup_cpustat { int pakfire_cgroup_cpustat(Pakfire pakfire, const char* group, struct pakfire_cgroup_cpustat* st); +int pakfire_cgroup_set_nice(Pakfire pakfire, const char* group, int level); + #endif #endif /* PAKFIRE_CGROUP_H */ diff --git a/tests/libpakfire/cgroup.c b/tests/libpakfire/cgroup.c index 508614a3e..95df51bbc 100644 --- a/tests/libpakfire/cgroup.c +++ b/tests/libpakfire/cgroup.c @@ -163,6 +163,23 @@ static int test_cpustat(const struct test* t) { ); } +static int test_nice(const struct test* t) { + ASSERT_SUCCESS( + pakfire_cgroup_create(t->pakfire, "pakfire/test") + ); + + // Set nice level + ASSERT_SUCCESS( + pakfire_cgroup_set_nice(t->pakfire, "pakfire/test", 5) + ); + + ASSERT_SUCCESS( + pakfire_cgroup_destroy(t->pakfire, "pakfire/test") + ); + + return EXIT_SUCCESS; +} + static int test_random_name(const struct test* t) { char name1[] = "pakfire/execute-XXXXXX"; char name2[] = "pakfire/execute-XXXXXX"; @@ -182,6 +199,7 @@ int main(int argc, char** argv) { testsuite_add_test(test_killall); testsuite_add_test(test_cpustat); testsuite_add_test(test_random_name); + testsuite_add_test(test_nice); return testsuite_run(); }