[systemd-devel] [PATCH] fstab-generator: If we wait indefinitely for a mount, wait also for the device

Lennart Poettering lennart at poettering.net
Fri Mar 1 06:30:32 PST 2013


On Fri, 01.03.13 15:13, harald at redhat.com (harald at redhat.com) wrote:

> From: Harald Hoyer <harald at redhat.com>
> 
> Write out "JobTimeoutSec=0" for the device the mountpoint (which does
> not timeout) waits for.
> 
> This helps with grabbing a cup of coffee while booting and not have
> the crypto password dialog timeout and systemd in a failed state.

Hmm, this hooks into "wait", which is initialized from the kernel
cmdline rootwait? What are the precise semantics of the kernel there
regarding this flag, in a non-initrd case? We probably should mimic the
kernel here is good as we can...

So, in the non-initrd case: what does rootwait do on the kernel cmdline?
And what happens if it is not used?

> ---
>  src/fstab-generator/fstab-generator.c | 26 ++++++++++++++++++++++++++
>  1 file changed, 26 insertions(+)
> 
> diff --git a/src/fstab-generator/fstab-generator.c b/src/fstab-generator/fstab-generator.c
> index d4470f4..026d070 100644
> --- a/src/fstab-generator/fstab-generator.c
> +++ b/src/fstab-generator/fstab-generator.c
> @@ -313,6 +313,32 @@ static int add_mount(const char *what, const char *where, const char *type, cons
>                                  return r;
>  
>                          if (r > 0) {
> +                                if (wait) {
> +                                        free(unit);
> +                                        unit = strjoin(arg_dest, "/",
> device, ".d/JobTimeoutSec0.conf", NULL);


Hmm, we probably should always prefix drop-in snippets we generate with
"50-", so that people can easily order their stuff before/after what we
write here.

> +
> +                                        mkdir_parents_label(unit, 0755);
> +
> +                                        fclose(f);
> +                                        f = fopen(unit, "wxe");
> +                                        if (!f) {
> +                                                log_error("Failed to create unit file %s: %m", unit);
> +                                                return -errno;
> +                                        }
> +
> +                                        fprintf(f,
> +                                                "# Automatically generated by systemd-cryptsetup-generator\n\n"
> +                                                "[Unit]\n"
> +                                                "JobTimeoutSec=0\n"
> +                                                );
> +                                        fflush(f);
> +
> +                                        if (ferror(f)) {
> +                                                log_error("Failed to write file %s: %m", unit);
> +                                                return -errno;
> +                                        }


Hmm, probably something to use write_one_line_file() for. (Which should
probably be renamed, given that it is useful for writing multi-line
files, too...)

> +                                }
> +
>                                  free(lnk);
>                                  lnk = strjoin(arg_dest, "/", device, ".wants/", name, NULL);
>                                  if (!lnk)

Lennart

-- 
Lennart Poettering - Red Hat, Inc.


More information about the systemd-devel mailing list