diff options
author | Lennart Poettering <lennart@poettering.net> | 2020-01-21 18:16:05 +0100 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2020-01-21 20:23:37 +0100 |
commit | 61f9cf4e4c488adf47419a4a81a315196fc01d43 (patch) | |
tree | 854fe1480c3ad2306e08d1db33db1b19043bded3 /src/core/swap.c | |
parent | 5de0acf40d32e18e55712a045e708d60fcf2c9a8 (diff) | |
download | systemd-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.c | 30 |
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) { |