summaryrefslogtreecommitdiff
path: root/src/core/swap.c
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2020-01-21 18:16:05 +0100
committerLennart Poettering <lennart@poettering.net>2020-01-21 20:23:37 +0100
commit61f9cf4e4c488adf47419a4a81a315196fc01d43 (patch)
tree854fe1480c3ad2306e08d1db33db1b19043bded3 /src/core/swap.c
parent5de0acf40d32e18e55712a045e708d60fcf2c9a8 (diff)
downloadsystemd-61f9cf4e4c488adf47419a4a81a315196fc01d43.tar.gz
swap: generate automatic dependencies also for /proc/swaps devices
This catches up with the logic we do for mounts: we create deps based on /proc/swaps now too, with the right flags set.
Diffstat (limited to 'src/core/swap.c')
-rw-r--r--src/core/swap.c30
1 files changed, 24 insertions, 6 deletions
diff --git a/src/core/swap.c b/src/core/swap.c
index 473b3483ae..4155112f41 100644
--- a/src/core/swap.c
+++ b/src/core/swap.c
@@ -184,21 +184,39 @@ static int swap_arm_timer(Swap *s, usec_t usec) {
return 0;
}
+static SwapParameters* swap_get_parameters(Swap *s) {
+ assert(s);
+
+ if (s->from_proc_swaps)
+ return &s->parameters_proc_swaps;
+
+ if (s->from_fragment)
+ return &s->parameters_fragment;
+
+ return NULL;
+}
+
static int swap_add_device_dependencies(Swap *s) {
+ UnitDependencyMask mask;
+ SwapParameters *p;
+
assert(s);
if (!s->what)
return 0;
- if (!s->from_fragment)
+ p = swap_get_parameters(s);
+ if (!p)
return 0;
- if (is_device_path(s->what))
- return unit_add_node_dependency(UNIT(s), s->what, UNIT_BINDS_TO, UNIT_DEPENDENCY_FILE);
+ mask = s->from_proc_swaps ? UNIT_DEPENDENCY_PROC_SWAP : UNIT_DEPENDENCY_FILE;
+
+ if (is_device_path(p->what))
+ return unit_add_node_dependency(UNIT(s), p->what, UNIT_BINDS_TO, mask);
- /* File based swap devices need to be ordered after systemd-remount-fs.service,
- * since they might need a writable file system. */
- return unit_add_dependency_by_name(UNIT(s), UNIT_AFTER, SPECIAL_REMOUNT_FS_SERVICE, true, UNIT_DEPENDENCY_FILE);
+ /* File based swap devices need to be ordered after systemd-remount-fs.service, since they might need
+ * a writable file system. */
+ return unit_add_dependency_by_name(UNIT(s), UNIT_AFTER, SPECIAL_REMOUNT_FS_SERVICE, true, mask);
}
static int swap_add_default_dependencies(Swap *s) {