--- 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 +#include #include @@ -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; }