--- mountall-2.15.3/src/mountall.c.org 2010-10-06 19:09:39.000000000 +0200 +++ mountall-2.15.3/src/mountall.c 2012-03-07 17:16:29.522682066 +0100 @@ -93,6 +93,7 @@ TAG_SWAP, TAG_NOWAIT, TAG_SKIPPED, + TAG_NOFAIL, } Tag; typedef enum { @@ -1186,6 +1187,9 @@ case TAG_SKIPPED: nih_info (_("%s is %s"), MOUNT_NAME (mnt), "skipped"); break; + case TAG_NOFAIL: + nih_info (_("%s is %s"), MOUNT_NAME (mnt), "nofail"); + break; default: nih_assert_not_reached (); } @@ -1223,6 +1227,8 @@ } else { tag = TAG_NOWAIT; } + } else if (has_option (mnt, "nofail", FALSE)) { + tag = TAG_NOFAIL; } else { if (! has_option (mnt, "nobootwait", FALSE)) { tag = TAG_LOCAL; @@ -1392,6 +1398,7 @@ case TAG_NOWAIT: break; case TAG_SKIPPED: + case TAG_NOFAIL: break; case TAG_UNKNOWN: break; @@ -1430,6 +1437,7 @@ case TAG_SKIPPED: break; case TAG_UNKNOWN: + case TAG_NOFAIL: break; default: nih_assert_not_reached (); @@ -1451,7 +1459,7 @@ skip_mount (dep); } } - + trigger_events (); } @@ -1773,7 +1781,7 @@ } opts = cut_options (NULL, mnt, "showthrough", "optional", - "bootwait", "nobootwait", + "bootwait", "nobootwait", "nofail", NULL); if (mnt->mounted && (! fake)) { char *tmp; @@ -2905,6 +2913,13 @@ if ((plymouth_error == ERROR_FSCK_IN_PROGRESS) && fsck_in_progress) return; + if ((plymouth_error == ERROR_BORED) && plymouth_mnt && (plymouth_mnt->tag == TAG_NOFAIL)) { // added by RC + nih_error (_("Skipping mounting %s since it is marked \"nofail\" in fstab"), + MOUNT_NAME (plymouth_mnt)); + plymouth_mnt->error = ERROR_NONE; + skip_mount (plymouth_mnt); + return; + } ply_boot_client_tell_daemon_to_display_message (ply_boot_client, "",