summaryrefslogtreecommitdiffstats
path: root/mount
diff options
context:
space:
mode:
authorKarel Zak2010-10-25 14:03:16 +0200
committerKarel Zak2010-10-25 14:03:16 +0200
commita5fd3d685e6c2d0a7d80e7607ac6ff7bf7d05f67 (patch)
tree80e479cfa0c3b3f25a93b7d4ed37ecf5a30c09a5 /mount
parentumount: umount -r segfault (diff)
downloadkernel-qcow2-util-linux-a5fd3d685e6c2d0a7d80e7607ac6ff7bf7d05f67.tar.gz
kernel-qcow2-util-linux-a5fd3d685e6c2d0a7d80e7607ac6ff7bf7d05f67.tar.xz
kernel-qcow2-util-linux-a5fd3d685e6c2d0a7d80e7607ac6ff7bf7d05f67.zip
swapon: add support for "nofail" fstab mount option
This option is already supported by mount(8) and fsck(8), there is no reason to have any exception for swap devices. Note that the --ifexists command line option applies to all swap devices, the "nofail" setting is per device. Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'mount')
-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);