summaryrefslogtreecommitdiff
path: root/src/core/swap.c
diff options
context:
space:
mode:
authorOlivier Brunel <i.am.jack.mail@gmail.com>2012-10-13 14:24:15 +0200
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2012-10-29 09:04:25 +0000
commitb61e88162a6ce0c30da6984b0120959701283daa (patch)
tree79f0e8ad21285391e4d8db2b591ecd2c75db6c3b /src/core/swap.c
parent646134dc0d09bd74834aecfbd9a742e2a7069ec7 (diff)
swap: fix swap behaviour with symlinks
Starting a swap unit pointing to (What) a symlink (e.g. /dev/mapper/swap or /dev/disk/by-uuid/...) would have said unit marked active, following the one using the "actual" device (/dev/{dm-1,sda3}), but that new unit would be seen as inactive. Since all requests to stop swap units would follow/redirect to it, and it is seen inactive, nothing would be done (swapoff never called). This is because this unit would be treated twice in swap_process_new_swap, the second call to swap_add_one causing it to eventually be marked inactive.
Diffstat (limited to 'src/core/swap.c')
-rw-r--r--src/core/swap.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/core/swap.c b/src/core/swap.c
index 206bd939ca..97145a9974 100644
--- a/src/core/swap.c
+++ b/src/core/swap.c
@@ -427,7 +427,8 @@ static int swap_process_new_swap(Manager *m, const char *device, int prio, bool
return log_oom();
dn = udev_device_get_devnode(d);
- if (dn)
+ /* Skip dn==device, since that case will be handled below */
+ if (dn && !streq(dn, device))
r = swap_add_one(m, dn, device, prio, false, false, set_flags);
/* Add additional units for all symlinks */