77e6ed9
From 0659783c379ec16f0556f8e78b30be9fd70f45aa Mon Sep 17 00:00:00 2001
77e6ed9
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
77e6ed9
Date: Sat, 21 Mar 2015 11:31:16 -0400
77e6ed9
Subject: [PATCH] fstab-generator: ignore invalid swap priority
77e6ed9
77e6ed9
A failed priority is not something worth stopping boot over. Most people
77e6ed9
have only one swap device, in which case priority is irrelevant, and even
77e6ed9
if there is more than one swap device, they are all usable, and ignoring the
77e6ed9
priority field should only result in some loss of performance.
77e6ed9
77e6ed9
The kernel will report the priority as -1 if not set, so it's easy for
77e6ed9
people to make this mistake.
77e6ed9
77e6ed9
https://bugzilla.redhat.com/show_bug.cgi?id=1204336
77e6ed9
(cherry picked from commit e0952d9d021234e79f3a70f33a9e5d201872a417)
77e6ed9
---
77e6ed9
 src/fstab-generator/fstab-generator.c | 23 ++++++++++++++++-------
77e6ed9
 1 file changed, 16 insertions(+), 7 deletions(-)
77e6ed9
77e6ed9
diff --git a/src/fstab-generator/fstab-generator.c b/src/fstab-generator/fstab-generator.c
77e6ed9
index 5662b5fde1..8e2f522bd0 100644
77e6ed9
--- a/src/fstab-generator/fstab-generator.c
77e6ed9
+++ b/src/fstab-generator/fstab-generator.c
77e6ed9
@@ -54,9 +54,10 @@ static int add_swap(
77e6ed9
                 bool noauto,
77e6ed9
                 bool nofail) {
77e6ed9
 
77e6ed9
-        _cleanup_free_ char *name = NULL, *unit = NULL, *lnk = NULL;
77e6ed9
+        _cleanup_free_ char *name = NULL, *unit = NULL, *lnk = NULL, *filtered = NULL;
77e6ed9
         _cleanup_fclose_ FILE *f = NULL;
77e6ed9
         int r, pri = -1;
77e6ed9
+        const char *opts;
77e6ed9
 
77e6ed9
         assert(what);
77e6ed9
         assert(me);
77e6ed9
@@ -71,9 +72,17 @@ static int add_swap(
77e6ed9
                 return 0;
77e6ed9
         }
77e6ed9
 
77e6ed9
-        r = fstab_find_pri(me->mnt_opts, &pri);
77e6ed9
-        if (r < 0)
77e6ed9
-                return log_error_errno(r, "Failed to parse priority: %m");
77e6ed9
+        opts = me->mnt_opts;
77e6ed9
+        r = fstab_find_pri(opts, &pri);
77e6ed9
+        if (r < 0) {
77e6ed9
+                log_error_errno(r, "Failed to parse priority, ignoring: %m");
77e6ed9
+
77e6ed9
+                /* Remove invalid pri field */
77e6ed9
+                r = fstab_filter_options(opts, "pri\0", NULL, NULL, &filtered);
77e6ed9
+                if (r < 0)
77e6ed9
+                        return log_error_errno(r, "Failed to parse options: %m");
77e6ed9
+                opts = filtered;
77e6ed9
+        }
77e6ed9
 
77e6ed9
         name = unit_name_from_path(what, ".swap");
77e6ed9
         if (!name)
77e6ed9
@@ -106,15 +115,15 @@ static int add_swap(
77e6ed9
         if (pri >= 0)
77e6ed9
                 fprintf(f, "Priority=%i\n", pri);
77e6ed9
 
77e6ed9
-        if (!isempty(me->mnt_opts) && !streq(me->mnt_opts, "defaults"))
77e6ed9
-                fprintf(f, "Options=%s\n", me->mnt_opts);
77e6ed9
+        if (!isempty(opts) && !streq(opts, "defaults"))
77e6ed9
+                fprintf(f, "Options=%s\n", opts);
77e6ed9
 
77e6ed9
         r = fflush_and_check(f);
77e6ed9
         if (r < 0)
77e6ed9
                 return log_error_errno(r, "Failed to write unit file %s: %m", unit);
77e6ed9
 
77e6ed9
         /* use what as where, to have a nicer error message */
77e6ed9
-        r = generator_write_timeouts(arg_dest, what, what, me->mnt_opts, NULL);
77e6ed9
+        r = generator_write_timeouts(arg_dest, what, what, opts, NULL);
77e6ed9
         if (r < 0)
77e6ed9
                 return r;
77e6ed9