From ca9627e70852f6b2e835660df870fe3ab405882d Mon Sep 17 00:00:00 2001 From: "Suren A. Chilingaryan" Date: Sun, 1 Sep 2019 00:00:32 +0200 Subject: Initial import --- .../util-linux-2.12p-swapon-check-symlinks.patch | 34 ++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 sys-apps/util-linux/files/util-linux-2.12p-swapon-check-symlinks.patch (limited to 'sys-apps/util-linux/files/util-linux-2.12p-swapon-check-symlinks.patch') diff --git a/sys-apps/util-linux/files/util-linux-2.12p-swapon-check-symlinks.patch b/sys-apps/util-linux/files/util-linux-2.12p-swapon-check-symlinks.patch new file mode 100644 index 0000000..f421458 --- /dev/null +++ b/sys-apps/util-linux/files/util-linux-2.12p-swapon-check-symlinks.patch @@ -0,0 +1,34 @@ +--- util-linux-2.12b/mount/swapon.c ++++ util-linux-2.12b/mount/swapon.c +@@ -7,2 +7,3 @@ + #include ++#include + #include +@@ -137,10 +138,27 @@ + static int + is_in_proc_swaps(const char *fname) { + int i; ++ struct stat fstatbuf; + + for (i = 0; i < numSwaps; i++) + if (swapFiles[i] && !strcmp(fname, swapFiles[i])) + return 1; ++ ++ /* fallback: ++ * if the device in /etc/fstab is a symlink, the entry ++ * in /proc/swaps won't match because the kernel stores ++ * absolute pathnames. Here we compare dev_t's. ++ */ ++ if (!lstat(fname, &fstatbuf)) ++ if (S_ISLNK(fstatbuf.st_mode)) { ++ struct stat swapstatbuf; ++ stat(fname, &fstatbuf); ++ for (i = 0; i < numSwaps; i++) ++ if (swapFiles[i] && !stat(swapFiles[i], &swapstatbuf) && \ ++ swapstatbuf.st_rdev == fstatbuf.st_rdev) ++ return 1; ++ } ++ + return 0; + } + -- cgit v1.2.3