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.
56 lines
2.0 KiB
56 lines
2.0 KiB
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 42f995990c..984be2d9a9 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); |
|
} |
|
|
|
|