From: Lennart Poettering Date: Mon, 26 Jun 2017 15:40:08 +0000 (+0200) Subject: core: make IOSchedulingClass= and IOSchedulingPriority= settable for transient units X-Git-Tag: chiark/234.4-1+devuan1.1+iwj1~94 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=05c2ba9bc445a75094f8a48e92b79dcedeec3e1a;p=elogind.git core: make IOSchedulingClass= and IOSchedulingPriority= settable for transient units This patch is a bit more complex thant I hoped. In particular the single IOScheduling= property exposed on the bus is split up into IOSchedulingClass= and IOSchedulingPriority= (though compat is retained). Otherwise the asymmetry between setting props and getting them is a bit too nasty. Fixes #5613 --- diff --git a/src/basic/process-util.c b/src/basic/process-util.c index cb41fbf31..da825a7c3 100644 --- a/src/basic/process-util.c +++ b/src/basic/process-util.c @@ -914,6 +914,23 @@ int pid_compare_func(const void *a, const void *b) { return 0; } +int ioprio_parse_priority(const char *s, int *ret) { + int i, r; + + assert(s); + assert(ret); + + r = safe_atoi(s, &i); + if (r < 0) + return r; + + if (!ioprio_priority_is_valid(i)) + return -EINVAL; + + *ret = i; + return 0; +} + static const char *const ioprio_class_table[] = { [IOPRIO_CLASS_NONE] = "none", [IOPRIO_CLASS_RT] = "realtime", diff --git a/src/basic/process-util.h b/src/basic/process-util.h index 33c6637a4..f73d598d8 100644 --- a/src/basic/process-util.h +++ b/src/basic/process-util.h @@ -25,10 +25,11 @@ #include #include #include -#include #include +#include #include "format-util.h" +#include "ioprio.h" #include "macro.h" #define procfs_file_alloca(pid, field) \ @@ -120,3 +121,13 @@ static inline bool nice_is_valid(int n) { return n >= PRIO_MIN && n < PRIO_MAX; } #endif // 0 + +static inline bool ioprio_class_is_valid(int i) { + return IN_SET(i, IOPRIO_CLASS_NONE, IOPRIO_CLASS_RT, IOPRIO_CLASS_BE, IOPRIO_CLASS_IDLE); +} + +static inline bool ioprio_priority_is_valid(int i) { + return i >= 0 && i < IOPRIO_BE_NR; +} + +int ioprio_parse_priority(const char *s, int *ret);