summaryrefslogtreecommitdiff
path: root/core/systemd/0002-swap-create-.wants-symlink-to-auto-swap-devices.patch
diff options
context:
space:
mode:
Diffstat (limited to 'core/systemd/0002-swap-create-.wants-symlink-to-auto-swap-devices.patch')
-rw-r--r--core/systemd/0002-swap-create-.wants-symlink-to-auto-swap-devices.patch90
1 files changed, 90 insertions, 0 deletions
diff --git a/core/systemd/0002-swap-create-.wants-symlink-to-auto-swap-devices.patch b/core/systemd/0002-swap-create-.wants-symlink-to-auto-swap-devices.patch
new file mode 100644
index 000000000..4b8743464
--- /dev/null
+++ b/core/systemd/0002-swap-create-.wants-symlink-to-auto-swap-devices.patch
@@ -0,0 +1,90 @@
+From 4e82fe5213bedcb70e25c0270e516d5f2706d8c8 Mon Sep 17 00:00:00 2001
+From: Tom Gundersen <teg@jklm.no>
+Date: Mon, 16 Sep 2013 01:08:32 +0200
+Subject: [PATCH] swap: create .wants symlink to 'auto' swap devices
+
+As we load unit files lazily, we need to make sure something pulls in swap
+units that should be started automatically, otherwise the default dependencies
+will never be applied.
+
+This partially reinstates code removed in
+commit 64347fc2b983f33e7efb0fd2bb44e133fb9f30f4.
+
+Also don't order swap devices after swap.target when they are 'nofail'.
+---
+ src/core/swap.c | 8 ++++++--
+ src/fstab-generator/fstab-generator.c | 18 ++++++++++++++++--
+ 2 files changed, 22 insertions(+), 4 deletions(-)
+
+diff --git a/src/core/swap.c b/src/core/swap.c
+index 3950860..76c7d45 100644
+--- a/src/core/swap.c
++++ b/src/core/swap.c
+@@ -220,8 +220,12 @@ static int swap_add_default_dependencies(Swap *s) {
+ }
+
+ if (!noauto) {
+- r = unit_add_two_dependencies_by_name_inverse(UNIT(s), UNIT_AFTER, (nofail ? UNIT_WANTS : UNIT_REQUIRES),
+- SPECIAL_SWAP_TARGET, NULL, true);
++ if (nofail)
++ r = unit_add_dependency_by_name_inverse(UNIT(s),
++ UNIT_WANTS, SPECIAL_SWAP_TARGET, NULL, true);
++ else
++ r = unit_add_two_dependencies_by_name_inverse(UNIT(s),
++ UNIT_AFTER, UNIT_REQUIRES, SPECIAL_SWAP_TARGET, NULL, true);
+ if (r < 0)
+ return r;
+ }
+diff --git a/src/fstab-generator/fstab-generator.c b/src/fstab-generator/fstab-generator.c
+index 6ebe8aa..b73dfa4 100644
+--- a/src/fstab-generator/fstab-generator.c
++++ b/src/fstab-generator/fstab-generator.c
+@@ -66,6 +66,7 @@ static int mount_find_pri(struct mntent *me, int *ret) {
+ static int add_swap(const char *what, struct mntent *me) {
+ _cleanup_free_ char *name = NULL, *unit = NULL, *lnk = NULL, *device = NULL;
+ _cleanup_fclose_ FILE *f = NULL;
++ bool noauto;
+ int r, pri = -1;
+
+ assert(what);
+@@ -77,6 +78,8 @@ static int add_swap(const char *what, struct mntent *me) {
+ return pri;
+ }
+
++ noauto = !!hasmntopt(me, "noauto");
++
+ name = unit_name_from_path(what, ".swap");
+ if (!name)
+ return log_oom();
+@@ -97,8 +100,7 @@ static int add_swap(const char *what, struct mntent *me) {
+ fprintf(f,
+ "# Automatically generated by systemd-fstab-generator\n\n"
+ "[Unit]\n"
+- "SourcePath=/etc/fstab\n"
+- "\n"
++ "SourcePath=/etc/fstab\n\n"
+ "[Swap]\n"
+ "What=%s\n",
+ what);
+@@ -114,6 +116,18 @@ static int add_swap(const char *what, struct mntent *me) {
+ return -errno;
+ }
+
++ if (!noauto) {
++ lnk = strjoin(arg_dest, "/" SPECIAL_SWAP_TARGET ".wants/", name, NULL);
++ if (!lnk)
++ return log_oom();
++
++ mkdir_parents_label(lnk, 0755);
++ if (symlink(unit, lnk) < 0) {
++ log_error("Failed to create symlink %s: %m", lnk);
++ return -errno;
++ }
++ }
++
+ return 0;
+ }
+
+--
+1.8.4
+