You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
76 lines
2.7 KiB
76 lines
2.7 KiB
1 year ago
|
From 00f65b3c9b052007857558ec0776944ffe3979d4 Mon Sep 17 00:00:00 2001
|
||
|
From: Yu Watanabe <watanabe.yu+github@gmail.com>
|
||
|
Date: Mon, 8 May 2023 19:47:17 +0900
|
||
|
Subject: [PATCH] fstab-generator: fix error code propagation in
|
||
|
run_generator()
|
||
|
|
||
|
Previously, some errors might be ignored.
|
||
|
|
||
|
(cherry picked from commit 2646f1844553b5d9c6109ad6b1b86da0b6b1f248)
|
||
|
|
||
|
Related: #2190226
|
||
|
---
|
||
|
src/fstab-generator/fstab-generator.c | 29 +++++++++++++++++++--------
|
||
|
1 file changed, 21 insertions(+), 8 deletions(-)
|
||
|
|
||
|
diff --git a/src/fstab-generator/fstab-generator.c b/src/fstab-generator/fstab-generator.c
|
||
|
index bd1508bc30..c53feb6154 100644
|
||
|
--- a/src/fstab-generator/fstab-generator.c
|
||
|
+++ b/src/fstab-generator/fstab-generator.c
|
||
|
@@ -1265,7 +1265,7 @@ static int determine_usr(void) {
|
||
|
* with /sysroot/etc/fstab available, and then we can write additional units based
|
||
|
* on that file. */
|
||
|
static int run_generator(void) {
|
||
|
- int r, r2 = 0, r3 = 0;
|
||
|
+ int r, ret = 0;
|
||
|
|
||
|
r = proc_cmdline_parse(parse_proc_cmdline_item, NULL, 0);
|
||
|
if (r < 0)
|
||
|
@@ -1286,26 +1286,39 @@ static int run_generator(void) {
|
||
|
/* Always honour root= and usr= in the kernel command line if we are in an initrd */
|
||
|
if (in_initrd()) {
|
||
|
r = add_sysroot_mount();
|
||
|
+ if (r < 0 && ret >= 0)
|
||
|
+ ret = r;
|
||
|
|
||
|
- r2 = add_sysroot_usr_mount_or_fallback();
|
||
|
+ r = add_sysroot_usr_mount_or_fallback();
|
||
|
+ if (r < 0 && ret >= 0)
|
||
|
+ ret = r;
|
||
|
|
||
|
- r3 = add_volatile_root();
|
||
|
- } else
|
||
|
+ r = add_volatile_root();
|
||
|
+ if (r < 0 && ret >= 0)
|
||
|
+ ret = r;
|
||
|
+ } else {
|
||
|
r = add_volatile_var();
|
||
|
+ if (r < 0 && ret >= 0)
|
||
|
+ ret = r;
|
||
|
+ }
|
||
|
|
||
|
/* Honour /etc/fstab only when that's enabled */
|
||
|
if (arg_fstab_enabled) {
|
||
|
/* Parse the local /etc/fstab, possibly from the initrd */
|
||
|
- r2 = parse_fstab(false);
|
||
|
+ r = parse_fstab(false);
|
||
|
+ if (r < 0 && ret >= 0)
|
||
|
+ ret = r;
|
||
|
|
||
|
/* If running in the initrd also parse the /etc/fstab from the host */
|
||
|
if (in_initrd())
|
||
|
- r3 = parse_fstab(true);
|
||
|
+ r = parse_fstab(true);
|
||
|
else
|
||
|
- r3 = generator_enable_remount_fs_service(arg_dest);
|
||
|
+ r = generator_enable_remount_fs_service(arg_dest);
|
||
|
+ if (r < 0 && ret >= 0)
|
||
|
+ ret = r;
|
||
|
}
|
||
|
|
||
|
- return r < 0 ? r : r2 < 0 ? r2 : r3;
|
||
|
+ return ret;
|
||
|
}
|
||
|
|
||
|
static int run(int argc, char **argv) {
|