From: Zbigniew Jędrzejewski-Szmek Date: Sun, 28 Sep 2014 14:37:52 +0000 (-0400) Subject: core/swap: follow the configured unit by default X-Git-Tag: v217~403 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=cdc8982030271785d650af410230397bbb5a4be9 core/swap: follow the configured unit by default Phenomenon: parameters configured in /etc/fstab for swap units are ignored. E.g. pri= settings have no effect when systemd starts swap units. What is even more confusing, .swap units for the name used in /etc/fstab initially show proper values for Priority=, but after starting them, they are re-initalized from /proc/swaps and show the -1 value from /proc/swaps. Change swap units to follow the original configured unit. This way proper settings are used when starting the swap. --- diff --git a/src/core/swap.c b/src/core/swap.c index 36c9e029e..ef90d0efd 100644 --- a/src/core/swap.c +++ b/src/core/swap.c @@ -1208,11 +1208,25 @@ static Unit *swap_following(Unit *u) { assert(s); - if (streq_ptr(s->what, s->devnode)) + /* If the user configured the swap through /etc/fstab or + * a device unit, follow that. */ + + if (s->from_fragment) return NULL; - /* Make everybody follow the unit that's named after the swap - * device in the kernel */ + LIST_FOREACH_AFTER(same_devnode, other, s) + if (other->from_fragment) + return UNIT(other); + + LIST_FOREACH_BEFORE(same_devnode, other, s) + if (other->from_fragment) + return UNIT(other); + + /* Otherwise make everybody follow the unit that's named after + * the swap device in the kernel */ + + if (streq_ptr(s->what, s->devnode)) + return NULL; LIST_FOREACH_AFTER(same_devnode, other, s) if (streq_ptr(other->what, other->devnode)) @@ -1225,6 +1239,7 @@ static Unit *swap_following(Unit *u) { first = other; } + /* Fall back to the first on the list */ return UNIT(first); }