summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mount/swapon.86
-rw-r--r--mount/swapon.c8
2 files changed, 11 insertions, 3 deletions
diff --git a/mount/swapon.8 b/mount/swapon.8
index a3ebc97cd..595198d51 100644
--- a/mount/swapon.8
+++ b/mount/swapon.8
@@ -113,6 +113,12 @@ Devices that are already being used as swap are silently skipped.
.TP
.B "\-e, \-\-ifexists"
Silently skip devices that do not exist.
+The
+.I /etc/fstab
+mount option
+.BI nofail
+may be also used to skip non-existing device.
+
.TP
.B "\-f, \-\-fixpgsz"
Reinitialize (exec /sbin/mkswap) the swap space if its page size does not
diff --git a/mount/swapon.c b/mount/swapon.c
index d51149251..45cd26699 100644
--- a/mount/swapon.c
+++ b/mount/swapon.c
@@ -573,7 +573,7 @@ swapon_all(void) {
while ((fstab = getmntent(fp)) != NULL) {
const char *special;
- int skip = 0;
+ int skip = 0, nofail = ifexists;
int pri = priority;
char *opt, *opts;
@@ -588,6 +588,8 @@ swapon_all(void) {
pri = atoi(opt+4);
if (strcmp(opt, "noauto") == 0)
skip = 1;
+ if (strcmp(opt, "nofail") == 0)
+ nofail = 1;
}
free(opts);
@@ -596,13 +598,13 @@ swapon_all(void) {
special = fsprobe_get_devname_by_spec(fstab->mnt_fsname);
if (!special) {
- if (!ifexists)
+ if (!nofail)
status |= cannot_find(fstab->mnt_fsname);
continue;
}
if (!is_in_proc_swaps(special) &&
- (!ifexists || !access(special, R_OK)))
+ (!nofail || !access(special, R_OK)))
status |= do_swapon(special, pri, CANONIC);
free((void *) special);