1
0
mirror of https://github.com/systemd/systemd.git synced 2024-12-22 17:35:35 +03:00

core/exec-invoke: call setpriority() after sched_setattr()

The nice value is part of struct sched_attr, and consequently invoking
sched_setattr() after setpriority() would clobber the nice value with
the default (as we are not setting it in struct sched_attr).

It would be best to combine both calls, but for now simply invoke
setpriority() after sched_setattr() to make sure Nice= remains effective
when used together with CPUSchedulingPolicy=.

(cherry picked from commit 711a157738)
This commit is contained in:
Ivan Shapovalov 2024-08-07 10:02:45 +02:00 committed by Luca Boccassi
parent 6f57f9b8aa
commit b628d4dfa6

View File

@ -4402,14 +4402,6 @@ int exec_invoke(
}
}
if (context->nice_set) {
r = setpriority_closest(context->nice);
if (r < 0) {
*exit_status = EXIT_NICE;
return log_exec_error_errno(context, params, r, "Failed to set up process scheduling priority (nice level): %m");
}
}
if (context->cpu_sched_set) {
struct sched_attr attr = {
.size = sizeof(attr),
@ -4425,6 +4417,14 @@ int exec_invoke(
}
}
if (context->nice_set) {
r = setpriority_closest(context->nice);
if (r < 0) {
*exit_status = EXIT_NICE;
return log_exec_error_errno(context, params, r, "Failed to set up process scheduling priority (nice level): %m");
}
}
if (context->cpu_affinity_from_numa || context->cpu_set.set) {
_cleanup_(cpu_set_reset) CPUSet converted_cpu_set = {};
const CPUSet *cpu_set;