]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
swap: always add in extras when we load a swap unit 10980/head
authorLennart Poettering <lennart@poettering.net>
Wed, 28 Nov 2018 19:35:50 +0000 (20:35 +0100)
committerLennart Poettering <lennart@poettering.net>
Fri, 7 Dec 2018 16:35:32 +0000 (17:35 +0100)
Much like for the mount units we need fields such as the slice
initialized by the time we activate the swap, hence when the kernel
let's us know about a new swap that appeared we need to initialize the
slice in any Swap object we allocated for that right-away, even if we
can't read the real unit file for the swap device.

src/core/swap.c

index 277d0791c2cd3d287f7c4439670c9f152ceb3946..2d8463b8b1812173ec019b0274eaf4d39799cff0 100644 (file)
@@ -337,7 +337,7 @@ static int swap_add_extras(Swap *s) {
 
 static int swap_load(Unit *u) {
         Swap *s = SWAP(u);
-        int r;
+        int r, q;
 
         assert(s);
         assert(u->load_state == UNIT_STUB);
@@ -347,16 +347,18 @@ static int swap_load(Unit *u) {
                 r = unit_load_fragment_and_dropin_optional(u);
         else
                 r = unit_load_fragment_and_dropin(u);
-        if (r < 0)
-                return r;
 
-        if (u->load_state == UNIT_LOADED) {
-
-                r = swap_add_extras(s);
-                if (r < 0)
-                        return r;
+        /* Add in some extras, and do so either when we successfully loaded something or when /proc/swaps is already
+         * active. */
+        if (u->load_state == UNIT_LOADED || s->from_proc_swaps)
+                q = swap_add_extras(s);
+        else
+                q = 0;
 
-        }
+        if (r < 0)
+                return r;
+        if (q < 0)
+                return q;
 
         return swap_verify(s);
 }