diff options
author | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2022-07-14 12:46:18 +0200 |
---|---|---|
committer | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2022-07-15 15:48:05 +0200 |
commit | 7772c177b811e534bd4351e103a56e320e5b699a (patch) | |
tree | b74e4119c7a64fab93e54c625b2348da76f00d18 /src/fstab-generator | |
parent | efc5fd3d72b51a7c32822f19515d0624b7a286e0 (diff) | |
download | systemd-7772c177b811e534bd4351e103a56e320e5b699a.tar.gz |
fstab-generator: properly report the source of data
Mount information can come from /etc/fstab, /sysroot/etc/fstab, and
/proc/cmdline. Even when we had the path to the right source handy, we would
often write something inaccurate. In particular, in the initrd, we would
generally write "/etc/fstab" instead of "/sysroot/etc/fstab" for no good
reason.
Diffstat (limited to 'src/fstab-generator')
-rw-r--r-- | src/fstab-generator/fstab-generator.c | 45 |
1 files changed, 23 insertions, 22 deletions
diff --git a/src/fstab-generator/fstab-generator.c b/src/fstab-generator/fstab-generator.c index 046ca421ef..b4bcc89132 100644 --- a/src/fstab-generator/fstab-generator.c +++ b/src/fstab-generator/fstab-generator.c @@ -92,6 +92,7 @@ static int write_what(FILE *f, const char *what) { } static int add_swap( + const char *source, const char *what, struct mntent *me, MountPointFlags flags) { @@ -122,7 +123,7 @@ static int add_swap( if (r < 0) return log_error_errno(r, "Failed to generate unit name: %m"); - r = generator_open_unit_file(arg_dest, fstab_path(), name, &f); + r = generator_open_unit_file(arg_dest, source, name, &f); if (r < 0) return r; @@ -130,7 +131,7 @@ static int add_swap( "[Unit]\n" "Documentation=man:fstab(5) man:systemd-fstab-generator(8)\n" "SourcePath=%s\n", - fstab_path()); + source); r = generator_write_blockdev_dependency(f, what); if (r < 0) @@ -339,6 +340,7 @@ static int write_extra_dependencies(FILE *f, const char *opts) { } static int add_mount( + const char *source, const char *dest, const char *what, const char *where, @@ -347,8 +349,7 @@ static int add_mount( const char *opts, int passno, MountPointFlags flags, - const char *post, - const char *source) { + const char *post) { _cleanup_free_ char *name = NULL, @@ -406,7 +407,7 @@ static int add_mount( if (r < 0) return log_error_errno(r, "Failed to generate unit name: %m"); - r = generator_open_unit_file(dest, fstab_path(), name, &f); + r = generator_open_unit_file(dest, source, name, &f); if (r < 0) return r; @@ -536,7 +537,7 @@ static int add_mount( f = safe_fclose(f); - r = generator_open_unit_file(dest, fstab_path(), automount_name, &f); + r = generator_open_unit_file(dest, source, automount_name, &f); if (r < 0) return r; @@ -650,7 +651,7 @@ static int parse_fstab(bool initrd) { nofail * MOUNT_NOFAIL; if (streq(me->mnt_type, "swap")) - k = add_swap(what, me, flags); + k = add_swap(fstab, what, me, flags); else { bool rw_only, automount; const char *post; @@ -670,7 +671,8 @@ static int parse_fstab(bool initrd) { else post = SPECIAL_LOCAL_FS_TARGET; - k = add_mount(arg_dest, + k = add_mount(fstab, + arg_dest, what, canonical_where ?: where, canonical_where ? where: NULL, @@ -678,8 +680,7 @@ static int parse_fstab(bool initrd) { me->mnt_opts, me->mnt_passno, flags, - post, - fstab); + post); } if (r >= 0 && k < 0) @@ -818,7 +819,8 @@ static int add_sysroot_mount(void) { return r; } - return add_mount(arg_dest, + return add_mount("/proc/cmdline", + arg_dest, what, "/sysroot", NULL, @@ -826,8 +828,7 @@ static int add_sysroot_mount(void) { opts, is_device_path(what) ? 1 : 0, /* passno */ 0, /* makefs off, growfs off, noauto off, nofail off, automount off */ - SPECIAL_INITRD_ROOT_FS_TARGET, - "/proc/cmdline"); + SPECIAL_INITRD_ROOT_FS_TARGET); } static int add_sysroot_usr_mount(void) { @@ -898,7 +899,8 @@ static int add_sysroot_usr_mount(void) { log_debug("Found entry what=%s where=/sysusr/usr type=%s opts=%s", what, strna(arg_usr_fstype), strempty(opts)); - r = add_mount(arg_dest, + r = add_mount("/proc/cmdline", + arg_dest, what, "/sysusr/usr", NULL, @@ -906,14 +908,14 @@ static int add_sysroot_usr_mount(void) { opts, is_device_path(what) ? 1 : 0, /* passno */ 0, - SPECIAL_INITRD_USR_FS_TARGET, - "/proc/cmdline"); + SPECIAL_INITRD_USR_FS_TARGET); if (r < 0) return r; log_debug("Synthesizing entry what=/sysusr/usr where=/sysrootr/usr opts=bind"); - r = add_mount(arg_dest, + r = add_mount("/proc/cmdline", + arg_dest, "/sysusr/usr", "/sysroot/usr", NULL, @@ -921,8 +923,7 @@ static int add_sysroot_usr_mount(void) { "bind", 0, 0, - SPECIAL_INITRD_FS_TARGET, - "/proc/cmdline"); + SPECIAL_INITRD_FS_TARGET); if (r < 0) return r; @@ -966,7 +967,8 @@ static int add_volatile_var(void) { /* If requested, mount /var as tmpfs, but do so only if there's nothing else defined for this. */ - return add_mount(arg_dest_late, + return add_mount("/proc/cmdline", + arg_dest_late, "tmpfs", "/var", NULL, @@ -974,8 +976,7 @@ static int add_volatile_var(void) { "mode=0755" TMPFS_LIMITS_VAR, 0, 0, - SPECIAL_LOCAL_FS_TARGET, - "/proc/cmdline"); + SPECIAL_LOCAL_FS_TARGET); } static int parse_proc_cmdline_item(const char *key, const char *value, void *data) { |