summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFranck Bui <fbui@suse.com>2015-11-23 11:14:10 +0100
committerFranck Bui <fbui@suse.com>2015-11-23 11:23:44 +0100
commit8bf23dc757dacaaf5a8d2c21aabf71aee08d1a04 (patch)
tree67d9fb4bf3289459bdcfdbc60f1a4a92fb764662
parent6098bb0dc31b1c472ab868088d04234352c44b75 (diff)
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.
-rw-r--r--src/core/swap.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/core/swap.c b/src/core/swap.c
index ee0838e676..b6e4372fc0 100644
--- a/src/core/swap.c
+++ b/src/core/swap.c
@@ -211,6 +211,8 @@ static int swap_add_device_links(Swap *s) {
}
static int swap_add_default_dependencies(Swap *s) {
+ int r;
+
assert(s);
if (!UNIT(s)->default_dependencies)
@@ -222,6 +224,12 @@ static int swap_add_default_dependencies(Swap *s) {
if (detect_container() > 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);
}