cryptsetup-generator: unconfuse writing of the device timeout

The code was using timeout=0 as the default option string. This option string
was ultimately passed to generator_write_timeouts(), which only looks for
comment=systemd.device-timeout= or x-systemd.device-timeout=, i.e. the whole
call path was bogus. Let's rework this: generator_write_timeouts() now writes
any timeouts if configured by the user. create_disk() writes out it's own
timeout, but with lower priority. Since the code path that was calling
timeout=0 was not effective, the only change is that we stop overwriting the
timeout if explicitly configured by the user.

In both code paths, ignore failure to write.
This commit is contained in:
Zbigniew Jędrzejewski-Szmek 2019-12-03 16:06:47 +01:00
parent cb51560803
commit 7cecc56316
2 changed files with 12 additions and 14 deletions

View file

@ -362,7 +362,7 @@ static int create_disk(
r = generator_write_timeouts(arg_dest, device, name, options, &filtered);
if (r < 0)
return r;
log_warning_errno(r, "Failed to write device timeout drop-in: %m");
if (filtered) {
filtered_escaped = specifier_escape(filtered);
@ -415,11 +415,11 @@ static int create_disk(
return r;
if (!noauto && !nofail) {
r = write_drop_in(arg_dest, dmname, 90, "device-timeout",
"# Automatically generated by systemd-cryptsetup-generator \n\n"
r = write_drop_in(arg_dest, dmname, 40, "device-timeout",
"# Automatically generated by systemd-cryptsetup-generator\n\n"
"[Unit]\nJobTimeoutSec=0");
if (r < 0)
return log_error_errno(r, "Failed to write device drop-in: %m");
log_warning_errno(r, "Failed to write device timeout drop-in: %m");
}
return 0;
@ -646,7 +646,6 @@ static int add_proc_cmdline_devices(void) {
crypto_device *d;
HASHMAP_FOREACH(d, arg_disks, i) {
const char *options;
_cleanup_free_ char *device = NULL;
if (!d->create)
@ -662,14 +661,11 @@ static int add_proc_cmdline_devices(void) {
if (!device)
return log_oom();
if (d->options)
options = d->options;
else if (arg_default_options)
options = arg_default_options;
else
options = "timeout=0";
r = create_disk(d->name, device, d->keyfile ?: arg_default_keyfile, d->keydev, options);
r = create_disk(d->name,
device,
d->keyfile ?: arg_default_keyfile,
d->keydev,
d->options ?: arg_default_options);
if (r < 0)
return r;
}

View file

@ -237,10 +237,12 @@ int generator_write_timeouts(
return log_error_errno(r, "Failed to make unit name from path: %m");
return write_drop_in_format(dir, unit, 50, "device-timeout",
"# Automatically generated by %s\n\n"
"# Automatically generated by %s\n"
"# from supplied options \"%s\"\n\n"
"[Unit]\n"
"JobRunningTimeoutSec=%s",
program_invocation_short_name,
opts,
timeout);
}