chiark / gitweb /
swap: fix swap behaviour with symlinks
authorOlivier Brunel <i.am.jack.mail@gmail.com>
Sat, 13 Oct 2012 12:24:15 +0000 (14:24 +0200)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Mon, 29 Oct 2012 09:04:25 +0000 (09:04 +0000)
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.

src/core/swap.c

index 206bd93..97145a9 100644 (file)
@@ -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 */