diff --git a/man/systemd.exec.xml b/man/systemd.exec.xml index b21c5aa104..8fb9ecc6dc 100644 --- a/man/systemd.exec.xml +++ b/man/systemd.exec.xml @@ -728,7 +728,8 @@ CapabilityBoundingSet=~CAP_B CAP_C Sets the I/O scheduling class for executed processes. Takes an integer between 0 and 3 or one of the strings , , or - . See + . If the empty string is assigned to this option, all prior assignments to both + IOSchedulingClass= and IOSchedulingPriority= have no effect. See ioprio_set2 for details. @@ -738,7 +739,9 @@ CapabilityBoundingSet=~CAP_B CAP_C Sets the I/O scheduling priority for executed processes. Takes an integer between 0 (highest priority) and 7 (lowest priority). The available priorities depend on the selected I/O scheduling class (see - above). See ioprio_set2 for + above). If the empty string is assigned to this option, all prior assignments to both + IOSchedulingClass= and IOSchedulingPriority= have no effect. + See ioprio_set2 for details. diff --git a/src/core/load-fragment.c b/src/core/load-fragment.c index d2ce73f726..94583b5662 100644 --- a/src/core/load-fragment.c +++ b/src/core/load-fragment.c @@ -1115,6 +1115,12 @@ int config_parse_exec_io_class(const char *unit, assert(rvalue); assert(data); + if (isempty(rvalue)) { + c->ioprio_set = false; + c->ioprio = IOPRIO_PRIO_VALUE(IOPRIO_CLASS_BE, 0); + return 0; + } + x = ioprio_class_from_string(rvalue); if (x < 0) { log_syntax(unit, LOG_ERR, filename, line, 0, "Failed to parse IO scheduling class, ignoring: %s", rvalue); @@ -1146,6 +1152,12 @@ int config_parse_exec_io_priority(const char *unit, assert(rvalue); assert(data); + if (isempty(rvalue)) { + c->ioprio_set = false; + c->ioprio = IOPRIO_PRIO_VALUE(IOPRIO_CLASS_BE, 0); + return 0; + } + r = ioprio_parse_priority(rvalue, &i); if (r < 0) { log_syntax(unit, LOG_ERR, filename, line, r, "Failed to parse IO priority, ignoring: %s", rvalue);