You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
57 lines
2.0 KiB
57 lines
2.0 KiB
7 years ago
|
From 4fec67c88f7ddd02fecf711996f42ed4c9d24da6 Mon Sep 17 00:00:00 2001
|
||
|
From: Franck Bui <fbui@suse.com>
|
||
|
Date: Mon, 23 Nov 2015 11:14:10 +0100
|
||
|
Subject: [PATCH] make sure all swap units are ordered before the swap target
|
||
|
|
||
|
When shutting down the system, the swap devices can be disabled long
|
||
|
time before the swap target is stopped. They're actually the first
|
||
|
units systemd turns off on my system.
|
||
|
|
||
|
This is incorrect and due to swap devices having multiple associated
|
||
|
swap unit files. The main one is usually created by the fstab
|
||
|
generator and is used to start the swap device.
|
||
|
|
||
|
Once done, systemd creates some 'alias' units for the same swap
|
||
|
device, one for each swap dev link. But those units are missing an
|
||
|
ordering dependencies which was created by the fstab generator for the
|
||
|
main swap unit.
|
||
|
|
||
|
Therefore during shutdown those 'alias' units can be stopped at
|
||
|
anytime before unmount.target target.
|
||
|
|
||
|
This patch makes sure that all swap units are stopped after the
|
||
|
swap.target target.
|
||
|
|
||
|
Cherry-picked from: 8bf23dc757dacaaf5a8d2c21aabf71aee08d1a04
|
||
|
Resolves: #1298355
|
||
|
---
|
||
|
src/core/swap.c | 8 ++++++++
|
||
|
1 file changed, 8 insertions(+)
|
||
|
|
||
|
diff --git a/src/core/swap.c b/src/core/swap.c
|
||
|
index 42f995990..984be2d9a 100644
|
||
|
--- a/src/core/swap.c
|
||
|
+++ b/src/core/swap.c
|
||
|
@@ -210,6 +210,8 @@ static int swap_add_device_links(Swap *s) {
|
||
|
}
|
||
|
|
||
|
static int swap_add_default_dependencies(Swap *s) {
|
||
|
+ int r;
|
||
|
+
|
||
|
assert(s);
|
||
|
|
||
|
if (UNIT(s)->manager->running_as != SYSTEMD_SYSTEM)
|
||
|
@@ -218,6 +220,12 @@ static int swap_add_default_dependencies(Swap *s) {
|
||
|
if (detect_container(NULL) > 0)
|
||
|
return 0;
|
||
|
|
||
|
+ /* swap units generated for the swap dev links are missing the
|
||
|
+ * ordering dep against the swap target. */
|
||
|
+ r = unit_add_dependency_by_name(UNIT(s), UNIT_BEFORE, SPECIAL_SWAP_TARGET, NULL, true);
|
||
|
+ if (r < 0)
|
||
|
+ return r;
|
||
|
+
|
||
|
return unit_add_two_dependencies_by_name(UNIT(s), UNIT_BEFORE, UNIT_CONFLICTS, SPECIAL_UMOUNT_TARGET, NULL, true);
|
||
|
}
|
||
|
|