aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2014-06-27 15:03:05 -0400
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2014-06-30 18:39:45 -0400
commitb3208b662948b51ff34e7b7752e28ec7a48708ae (patch)
tree71a3bc41708372ff7d6f219a5b34c816bef07232
parentMove x-systemd-device.timeout handling from core to fstab-generator (diff)
downloadsystemd-b3208b662948b51ff34e7b7752e28ec7a48708ae.tar.gz
systemd-b3208b662948b51ff34e7b7752e28ec7a48708ae.tar.bz2
systemd-b3208b662948b51ff34e7b7752e28ec7a48708ae.zip
fstab-generator: allow x-systemd.device-timeout for swap units
-rw-r--r--src/fstab-generator/fstab-generator.c5
-rw-r--r--src/shared/generator.c24
2 files changed, 20 insertions, 9 deletions
diff --git a/src/fstab-generator/fstab-generator.c b/src/fstab-generator/fstab-generator.c
index 6f392dfd4..1256a1ce5 100644
--- a/src/fstab-generator/fstab-generator.c
+++ b/src/fstab-generator/fstab-generator.c
@@ -129,6 +129,11 @@ static int add_swap(const char *what, struct mntent *me) {
return -errno;
}
+ /* use what as where, to have a nicer error message */
+ r = generator_write_timeouts(arg_dest, what, what, me->mnt_opts, NULL);
+ if (r < 0)
+ return r;
+
if (!noauto) {
lnk = strjoin(arg_dest, "/" SPECIAL_SWAP_TARGET ".wants/", name, NULL);
if (!lnk)
diff --git a/src/shared/generator.c b/src/shared/generator.c
index 762033bbd..1db5f8fb6 100644
--- a/src/shared/generator.c
+++ b/src/shared/generator.c
@@ -97,7 +97,7 @@ int generator_write_timeouts(const char *dir, const char *what, const char *wher
* user input, like crypto devices. */
_cleanup_free_ char *node = NULL, *unit = NULL, *t = NULL;
- char *prefix, *start, *timeout, *postfix;
+ char *start, *timeout;
usec_t u;
int r;
size_t len;
@@ -107,9 +107,11 @@ int generator_write_timeouts(const char *dir, const char *what, const char *wher
else if ((start = mount_test_option(opts, "x-systemd.device-timeout")))
timeout = start + 25;
else {
- *filtered = strdup(opts);
- if (!*filtered)
- return log_oom();
+ if (filtered) {
+ *filtered = strdup(opts);
+ if (!*filtered)
+ return log_oom();
+ }
return 0;
}
@@ -119,11 +121,15 @@ int generator_write_timeouts(const char *dir, const char *what, const char *wher
if (!t)
return -ENOMEM;
- prefix = strndupa(opts, start - opts - (start != opts));
- postfix = timeout + len + (timeout[len] != '\0');
- *filtered = strjoin(prefix, *postfix ? postfix : NULL, NULL);
- if (!*filtered)
- return log_oom();
+ if (filtered) {
+ char *prefix, *postfix;
+
+ prefix = strndupa(opts, start - opts - (start != opts));
+ postfix = timeout + len + (timeout[len] != '\0');
+ *filtered = strjoin(prefix, *postfix ? postfix : NULL, NULL);
+ if (!*filtered)
+ return log_oom();
+ }
r = parse_sec(t, &u);
if (r < 0) {