diff options
author | Lennart Poettering <lennart@poettering.net> | 2019-02-18 12:46:31 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-02-18 12:46:31 +0100 |
commit | 4d422d1f9e285a642247c46f5253ec6e765753df (patch) | |
tree | a431e2476de33bceb4e7ec5a6e21104695b2564b /src/fstab-generator/fstab-generator.c | |
parent | 8c7840c5ee6c3a3112996e74988718758142a422 (diff) | |
parent | 5ff8da1057db35fe8c2256c78d0a9fca93fd184b (diff) | |
download | systemd-4d422d1f9e285a642247c46f5253ec6e765753df.tar.gz |
Merge pull request #11226 from keszybz/enable-remount-fs-dynamically
Enable systemd-remount-fs.service dynamically
Diffstat (limited to 'src/fstab-generator/fstab-generator.c')
-rw-r--r-- | src/fstab-generator/fstab-generator.c | 52 |
1 files changed, 15 insertions, 37 deletions
diff --git a/src/fstab-generator/fstab-generator.c b/src/fstab-generator/fstab-generator.c index f3c223a270..30a6d356d0 100644 --- a/src/fstab-generator/fstab-generator.c +++ b/src/fstab-generator/fstab-generator.c @@ -518,6 +518,8 @@ static int parse_fstab(bool initrd) { int r = 0; fstab_path = initrd ? "/sysroot/etc/fstab" : "/etc/fstab"; + log_debug("Parsing %s...", fstab_path); + f = setmntent(fstab_path, "re"); if (!f) { if (errno == ENOENT) @@ -720,23 +722,14 @@ static int add_sysroot_usr_mount(void) { } static int add_volatile_root(void) { - const char *from, *to; - - if (arg_volatile_mode != VOLATILE_YES) - return 0; - /* Let's add in systemd-remount-volatile.service which will remount the root device to tmpfs if this is * requested, leaving only /usr from the root mount inside. */ - from = strjoina(SYSTEM_DATA_UNIT_PATH "/systemd-volatile-root.service"); - to = strjoina(arg_dest, "/" SPECIAL_INITRD_ROOT_FS_TARGET, ".requires/systemd-volatile-root.service"); - - (void) mkdir_parents(to, 0755); - - if (symlink(from, to) < 0) - return log_error_errno(errno, "Failed to hook in volatile remount service: %m"); + if (arg_volatile_mode != VOLATILE_YES) + return 0; - return 0; + return generator_add_symlink(arg_dest, SPECIAL_INITRD_ROOT_FS_TARGET, "requires", + SYSTEM_DATA_UNIT_PATH "/" SPECIAL_VOLATILE_ROOT_SERVICE); } static int add_volatile_var(void) { @@ -868,7 +861,7 @@ static int determine_root(void) { } static int run(const char *dest, const char *dest_early, const char *dest_late) { - int r; + int r, r2 = 0, r3 = 0; assert_se(arg_dest = dest); assert_se(arg_dest_late = dest_late); @@ -881,42 +874,27 @@ static int run(const char *dest, const char *dest_early, const char *dest_late) /* Always honour root= and usr= in the kernel command line if we are in an initrd */ if (in_initrd()) { - int k; - r = add_sysroot_mount(); - k = add_sysroot_usr_mount(); - if (k < 0) - r = k; + r2 = add_sysroot_usr_mount(); - k = add_volatile_root(); - if (k < 0) - r = k; + r3 = add_volatile_root(); } else r = add_volatile_var(); /* Honour /etc/fstab only when that's enabled */ if (arg_fstab_enabled) { - int k; - - log_debug("Parsing /etc/fstab"); - /* Parse the local /etc/fstab, possibly from the initrd */ - k = parse_fstab(false); - if (k < 0) - r = k; + r2 = parse_fstab(false); /* If running in the initrd also parse the /etc/fstab from the host */ - if (in_initrd()) { - log_debug("Parsing /sysroot/etc/fstab"); - - k = parse_fstab(true); - if (k < 0) - r = k; - } + if (in_initrd()) + r3 = parse_fstab(true); + else + r3 = generator_enable_remount_fs_service(arg_dest); } - return r; + return r < 0 ? r : r2 < 0 ? r2 : r3; } DEFINE_MAIN_GENERATOR_FUNCTION(run); |