Merge pull request #1598 from evverx/run-oomscoreadjust

systemd-run can launch units with OOMScoreAdjust
This commit is contained in:
Lennart Poettering 2015-10-19 19:02:47 +02:00
commit aa486a72be
5 changed files with 41 additions and 1 deletions

View file

@ -84,7 +84,7 @@ _systemd_run() {
LimitNICE= LimitRTPRIO= LimitRTTIME= PrivateTmp= PrivateDevices=
PrivateNetwork= NoNewPrivileges= WorkingDirectory= RootDirectory=
TTYPath= SyslogIdentifier= SyslogLevelPrefix= SyslogLevel=
SyslogFacility= TimerSlackNSec='
SyslogFacility= TimerSlackNSec= OOMScoreAdjust='
COMPREPLY=( $(compgen -W '$comps' -- "$cur") )
return 0

View file

@ -29,6 +29,7 @@
#include <libintl.h>
#include <limits.h>
#include <linux/magic.h>
#include <linux/oom.h>
#include <linux/sched.h>
#include <locale.h>
#include <netinet/ip.h>
@ -6800,3 +6801,7 @@ bool fdname_is_valid(const char *s) {
return p - s < 256;
}
bool oom_score_adjust_is_valid(int oa) {
return oa >= OOM_SCORE_ADJ_MIN && oa <= OOM_SCORE_ADJ_MAX;
}

View file

@ -941,3 +941,5 @@ void nop_signal_handler(int sig);
int version(void);
bool fdname_is_valid(const char *s);
bool oom_score_adjust_is_valid(int oa);

View file

@ -1186,6 +1186,24 @@ int bus_exec_context_set_transient_property(
return 1;
} else if (streq(name, "OOMScoreAdjust")) {
int oa;
r = sd_bus_message_read(message, "i", &oa);
if (r < 0)
return r;
if (!oom_score_adjust_is_valid(oa))
return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "OOM score adjust value out of range");
if (mode != UNIT_CHECK) {
c->oom_score_adjust = oa;
c->oom_score_adjust_set = true;
unit_write_drop_in_private_format(u, mode, name, "OOMScoreAdjust=%i\n", oa);
}
return 1;
} else if (rlimit_from_string(name) >= 0) {
uint64_t rl;
rlim_t x;

View file

@ -1665,6 +1665,21 @@ int bus_append_unit_property_assignment(sd_bus_message *m, const char *assignmen
}
r = sd_bus_message_append(m, "v", "t", n);
} else if (streq(field, "OOMScoreAdjust")) {
int oa;
r = safe_atoi(eq, &oa);
if (r < 0) {
log_error("Failed to parse %s value %s", field, eq);
return -EINVAL;
}
if (!oom_score_adjust_is_valid(oa)) {
log_error("OOM score adjust value out of range");
return -EINVAL;
}
r = sd_bus_message_append(m, "v", "i", oa);
} else {
log_error("Unknown assignment %s.", assignment);
return -EINVAL;