Merge pull request #1598 from evverx/run-oomscoreadjust
systemd-run can launch units with OOMScoreAdjust
This commit is contained in:
commit
aa486a72be
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue