]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
ioprio: normalize io priority values in configuration
authorLennart Poettering <lennart@poettering.net>
Wed, 24 Nov 2021 14:38:10 +0000 (15:38 +0100)
committerLennart Poettering <lennart@poettering.net>
Wed, 24 Nov 2021 15:12:15 +0000 (16:12 +0100)
Let's always say IOPRIO_CLASS_BE when IOPRIO_CALSS_NONE is set.

src/basic/ioprio-util.h
src/core/dbus-execute.c
src/core/load-fragment.c

index 0d3f70a220d50df8445f5ebd8f096ca22e2ca3c0..b8c9b7dd59fe9d52d701a8a065c93954e6e9da18 100644 (file)
@@ -20,3 +20,8 @@ int ioprio_parse_priority(const char *s, int *ret);
 /* IOPRIO_CLASS_NONE with any prio value is another way to say IOPRIO_CLASS_BE with level 4. Encode that in a
  * proper macro. */
 #define IOPRIO_DEFAULT_CLASS_AND_PRIO ioprio_prio_value(IOPRIO_CLASS_BE, 4)
+
+static inline int ioprio_normalize(int v) {
+        /* Converts IOPRIO_CLASS_NONE to what it actually means */
+        return ioprio_prio_class(v) == IOPRIO_CLASS_NONE ? IOPRIO_DEFAULT_CLASS_AND_PRIO : v;
+}
index c8323d84baae118d534ff2b195930b4c7ed4366d..5c499e5d060866bcf6f213713f638def7424e214 100644 (file)
@@ -2811,7 +2811,7 @@ int bus_exec_context_set_transient_property(
                         if (r < 0)
                                 return r;
 
-                        c->ioprio = ioprio_prio_value(q, ioprio_prio_data(c->ioprio));
+                        c->ioprio = ioprio_normalize(ioprio_prio_value(q, ioprio_prio_data(c->ioprio)));
                         c->ioprio_set = true;
 
                         unit_write_settingf(u, flags, name, "IOSchedulingClass=%s", s);
@@ -2830,7 +2830,7 @@ int bus_exec_context_set_transient_property(
                         return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Invalid IO scheduling priority: %i", p);
 
                 if (!UNIT_WRITE_FLAGS_NOOP(flags)) {
-                        c->ioprio = ioprio_prio_value(ioprio_prio_class(c->ioprio), p);
+                        c->ioprio = ioprio_normalize(ioprio_prio_value(ioprio_prio_class(c->ioprio), p));
                         c->ioprio_set = true;
 
                         unit_write_settingf(u, flags, name, "IOSchedulingPriority=%i", p);
index 71434a4bee9d951013d6920e4c6f5d7e8fd4fedf..92a52819e27d1bb4dcf7aa1166f8f92f0cd0b469 100644 (file)
@@ -1427,7 +1427,7 @@ int config_parse_exec_io_class(const char *unit,
                 return 0;
         }
 
-        c->ioprio = ioprio_prio_value(x, ioprio_prio_data(c->ioprio));
+        c->ioprio = ioprio_normalize(ioprio_prio_value(x, ioprio_prio_data(c->ioprio)));
         c->ioprio_set = true;
 
         return 0;
@@ -1464,7 +1464,7 @@ int config_parse_exec_io_priority(const char *unit,
                 return 0;
         }
 
-        c->ioprio = ioprio_prio_value(ioprio_prio_class(c->ioprio), i);
+        c->ioprio = ioprio_normalize(ioprio_prio_value(ioprio_prio_class(c->ioprio), i));
         c->ioprio_set = true;
 
         return 0;