From 05c2ba9bc445a75094f8a48e92b79dcedeec3e1a Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Mon, 26 Jun 2017 17:40:08 +0200 Subject: [PATCH] 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 --- src/basic/process-util.c | 17 +++++++++++++++++ src/basic/process-util.h | 13 ++++++++++++- 2 files changed, 29 insertions(+), 1 deletion(-) 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); -- 2.30.2