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