60 lines
2.1 KiB
Diff
60 lines
2.1 KiB
Diff
|
From cdc8982030271785d650af410230397bbb5a4be9 Mon Sep 17 00:00:00 2001
|
||
|
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
|
||
|
Date: Sun, 28 Sep 2014 10:37:52 -0400
|
||
|
Subject: [PATCH] core/swap: follow the configured unit by default
|
||
|
|
||
|
Phenomenon: parameters configured in /etc/fstab for swap units are
|
||
|
ignored. E.g. pri= settings have no effect when systemd starts swap
|
||
|
units. What is even more confusing, .swap units for the name used in
|
||
|
/etc/fstab initially show proper values for Priority=, but after
|
||
|
starting them, they are re-initalized from /proc/swaps and show the -1
|
||
|
value from /proc/swaps.
|
||
|
|
||
|
Change swap units to follow the original configured unit. This way
|
||
|
proper settings are used when starting the swap.
|
||
|
---
|
||
|
src/core/swap.c | 21 ++++++++++++++++++---
|
||
|
1 file changed, 18 insertions(+), 3 deletions(-)
|
||
|
|
||
|
diff --git a/src/core/swap.c b/src/core/swap.c
|
||
|
index 36c9e029e9..ef90d0efde 100644
|
||
|
--- a/src/core/swap.c
|
||
|
+++ b/src/core/swap.c
|
||
|
@@ -1208,11 +1208,25 @@ static Unit *swap_following(Unit *u) {
|
||
|
|
||
|
assert(s);
|
||
|
|
||
|
- if (streq_ptr(s->what, s->devnode))
|
||
|
+ /* If the user configured the swap through /etc/fstab or
|
||
|
+ * a device unit, follow that. */
|
||
|
+
|
||
|
+ if (s->from_fragment)
|
||
|
return NULL;
|
||
|
|
||
|
- /* Make everybody follow the unit that's named after the swap
|
||
|
- * device in the kernel */
|
||
|
+ LIST_FOREACH_AFTER(same_devnode, other, s)
|
||
|
+ if (other->from_fragment)
|
||
|
+ return UNIT(other);
|
||
|
+
|
||
|
+ LIST_FOREACH_BEFORE(same_devnode, other, s)
|
||
|
+ if (other->from_fragment)
|
||
|
+ return UNIT(other);
|
||
|
+
|
||
|
+ /* Otherwise make everybody follow the unit that's named after
|
||
|
+ * the swap device in the kernel */
|
||
|
+
|
||
|
+ if (streq_ptr(s->what, s->devnode))
|
||
|
+ return NULL;
|
||
|
|
||
|
LIST_FOREACH_AFTER(same_devnode, other, s)
|
||
|
if (streq_ptr(other->what, other->devnode))
|
||
|
@@ -1225,6 +1239,7 @@ static Unit *swap_following(Unit *u) {
|
||
|
first = other;
|
||
|
}
|
||
|
|
||
|
+ /* Fall back to the first on the list */
|
||
|
return UNIT(first);
|
||
|
}
|
||
|
|