blob: b9ed3466e70308f4c574d2cd2e492ee7c50363d1 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
--- util-linux-2.12b/mount/swapon.c.orig 2004-10-28 10:02:44.320023600 -0400
+++ util-linux-2.12b/mount/swapon.c 2004-10-28 10:02:14.384574000 -0400
@@ -22,2 +22,3 @@
#include <stdlib.h>
+#include <sys/param.h>
#include <stdio.h>
@@ -143,10 +144,26 @@
static int
is_in_proc_swaps(char *fname) {
int i;
+ struct stat fstatbuf;
for (i = 0; i < numSwaps; i++)
if (!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;
+ for (i = 0; i < numSwaps; i++)
+ if (!stat(swapFiles[i], &swapstatbuf) && \
+ swapstatbuf.st_dev == fstatbuf.st_dev)
+ return 1;
+ }
+
return 0;
}
|