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);