|
Zbigniew Jędrzejewski-Szmek |
f4a676 |
From a28e8d4e77d1bbca7f0b13c6a2eebc4883ba1123 Mon Sep 17 00:00:00 2001
|
|
Zbigniew Jędrzejewski-Szmek |
f4a676 |
From: NeilBrown <neil@brown.name>
|
|
Zbigniew Jędrzejewski-Szmek |
f4a676 |
Date: Tue, 23 May 2017 17:42:26 +1000
|
|
Zbigniew Jędrzejewski-Szmek |
f4a676 |
Subject: [PATCH] Allow TimeoutSec=0 to work as documented in mount units and
|
|
Zbigniew Jędrzejewski-Szmek |
f4a676 |
elsewhere (#6013)
|
|
Zbigniew Jędrzejewski-Szmek |
f4a676 |
|
|
Zbigniew Jędrzejewski-Szmek |
f4a676 |
Since commit 36c16a7cdd6c ("core: rework unit timeout handling, and add
|
|
Zbigniew Jędrzejewski-Szmek |
f4a676 |
new setting RuntimeMaxSec=") TimeoutSec=0 in mount units has
|
|
Zbigniew Jędrzejewski-Szmek |
f4a676 |
cause the mount to timeout immediately instead of never as documented.
|
|
Zbigniew Jędrzejewski-Szmek |
f4a676 |
|
|
Zbigniew Jędrzejewski-Szmek |
f4a676 |
There is a similar problem with Socket.TimeoutSec and Swap.TimeoutSec.
|
|
Zbigniew Jędrzejewski-Szmek |
f4a676 |
|
|
Zbigniew Jędrzejewski-Szmek |
f4a676 |
These are easily fixed using config_parse_sec_fix_0().
|
|
Zbigniew Jędrzejewski-Szmek |
f4a676 |
|
|
Zbigniew Jędrzejewski-Szmek |
f4a676 |
Automount.TimeoutIdleSec looks like it could have the same problem,
|
|
Zbigniew Jędrzejewski-Szmek |
f4a676 |
but doesn't because the kernel treats '0' as 'no timeout'.
|
|
Zbigniew Jędrzejewski-Szmek |
f4a676 |
It handle USEC_INFINITY correctly only because that constant has
|
|
Zbigniew Jędrzejewski-Szmek |
f4a676 |
the value '-1', and when round up, it becomes zero.
|
|
Zbigniew Jędrzejewski-Szmek |
f4a676 |
To avoid possible confusion, use config_parse_sec_fix_0() as well, and
|
|
Zbigniew Jędrzejewski-Szmek |
f4a676 |
explicitly handle USEC_INFINITY.
|
|
Zbigniew Jędrzejewski-Szmek |
f4a676 |
(cherry picked from commit 2d79a0bbb9f651656384a0a86ed814e6306fb5dd)
|
|
Zbigniew Jędrzejewski-Szmek |
f4a676 |
---
|
|
Zbigniew Jędrzejewski-Szmek |
f4a676 |
src/core/automount.c | 7 +++++--
|
|
Zbigniew Jędrzejewski-Szmek |
f4a676 |
src/core/load-fragment-gperf.gperf.m4 | 8 ++++----
|
|
Zbigniew Jędrzejewski-Szmek |
f4a676 |
2 files changed, 9 insertions(+), 6 deletions(-)
|
|
Zbigniew Jędrzejewski-Szmek |
f4a676 |
|
|
Zbigniew Jędrzejewski-Szmek |
f4a676 |
diff --git a/src/core/automount.c b/src/core/automount.c
|
|
Zbigniew Jędrzejewski-Szmek |
f4a676 |
index 99e8047620..ccc113b598 100644
|
|
Zbigniew Jędrzejewski-Szmek |
f4a676 |
--- a/src/core/automount.c
|
|
Zbigniew Jędrzejewski-Szmek |
f4a676 |
+++ b/src/core/automount.c
|
|
Zbigniew Jędrzejewski-Szmek |
f4a676 |
@@ -415,8 +415,11 @@ static int autofs_set_timeout(int dev_autofs_fd, int ioctl_fd, usec_t usec) {
|
|
Zbigniew Jędrzejewski-Szmek |
f4a676 |
init_autofs_dev_ioctl(¶m;;
|
|
Zbigniew Jędrzejewski-Szmek |
f4a676 |
param.ioctlfd = ioctl_fd;
|
|
Zbigniew Jędrzejewski-Szmek |
f4a676 |
|
|
Zbigniew Jędrzejewski-Szmek |
f4a676 |
- /* Convert to seconds, rounding up. */
|
|
Zbigniew Jędrzejewski-Szmek |
f4a676 |
- param.timeout.timeout = (usec + USEC_PER_SEC - 1) / USEC_PER_SEC;
|
|
Zbigniew Jędrzejewski-Szmek |
f4a676 |
+ if (usec == USEC_INFINITY)
|
|
Zbigniew Jędrzejewski-Szmek |
f4a676 |
+ param.timeout.timeout = 0;
|
|
Zbigniew Jędrzejewski-Szmek |
f4a676 |
+ else
|
|
Zbigniew Jędrzejewski-Szmek |
f4a676 |
+ /* Convert to seconds, rounding up. */
|
|
Zbigniew Jędrzejewski-Szmek |
f4a676 |
+ param.timeout.timeout = (usec + USEC_PER_SEC - 1) / USEC_PER_SEC;
|
|
Zbigniew Jędrzejewski-Szmek |
f4a676 |
|
|
Zbigniew Jędrzejewski-Szmek |
f4a676 |
if (ioctl(dev_autofs_fd, AUTOFS_DEV_IOCTL_TIMEOUT, ¶m) < 0)
|
|
Zbigniew Jędrzejewski-Szmek |
f4a676 |
return -errno;
|
|
Zbigniew Jędrzejewski-Szmek |
f4a676 |
diff --git a/src/core/load-fragment-gperf.gperf.m4 b/src/core/load-fragment-gperf.gperf.m4
|
|
Zbigniew Jędrzejewski-Szmek |
f4a676 |
index cb9e6fea27..3f7cbaa0d0 100644
|
|
Zbigniew Jędrzejewski-Szmek |
f4a676 |
--- a/src/core/load-fragment-gperf.gperf.m4
|
|
Zbigniew Jędrzejewski-Szmek |
f4a676 |
+++ b/src/core/load-fragment-gperf.gperf.m4
|
|
Zbigniew Jędrzejewski-Szmek |
f4a676 |
@@ -298,7 +298,7 @@ Socket.ExecStartPre, config_parse_exec, SOCKET_EXEC
|
|
Zbigniew Jędrzejewski-Szmek |
f4a676 |
Socket.ExecStartPost, config_parse_exec, SOCKET_EXEC_START_POST, offsetof(Socket, exec_command)
|
|
Zbigniew Jędrzejewski-Szmek |
f4a676 |
Socket.ExecStopPre, config_parse_exec, SOCKET_EXEC_STOP_PRE, offsetof(Socket, exec_command)
|
|
Zbigniew Jędrzejewski-Szmek |
f4a676 |
Socket.ExecStopPost, config_parse_exec, SOCKET_EXEC_STOP_POST, offsetof(Socket, exec_command)
|
|
Zbigniew Jędrzejewski-Szmek |
f4a676 |
-Socket.TimeoutSec, config_parse_sec, 0, offsetof(Socket, timeout_usec)
|
|
Zbigniew Jędrzejewski-Szmek |
f4a676 |
+Socket.TimeoutSec, config_parse_sec_fix_0, 0, offsetof(Socket, timeout_usec)
|
|
Zbigniew Jędrzejewski-Szmek |
f4a676 |
Socket.SocketUser, config_parse_user_group, 0, offsetof(Socket, user)
|
|
Zbigniew Jędrzejewski-Szmek |
f4a676 |
Socket.SocketGroup, config_parse_user_group, 0, offsetof(Socket, group)
|
|
Zbigniew Jędrzejewski-Szmek |
f4a676 |
Socket.SocketMode, config_parse_mode, 0, offsetof(Socket, socket_mode)
|
|
Zbigniew Jędrzejewski-Szmek |
f4a676 |
@@ -362,7 +362,7 @@ Mount.What, config_parse_unit_string_printf, 0,
|
|
Zbigniew Jędrzejewski-Szmek |
f4a676 |
Mount.Where, config_parse_path, 0, offsetof(Mount, where)
|
|
Zbigniew Jędrzejewski-Szmek |
f4a676 |
Mount.Options, config_parse_unit_string_printf, 0, offsetof(Mount, parameters_fragment.options)
|
|
Zbigniew Jędrzejewski-Szmek |
f4a676 |
Mount.Type, config_parse_string, 0, offsetof(Mount, parameters_fragment.fstype)
|
|
Zbigniew Jędrzejewski-Szmek |
f4a676 |
-Mount.TimeoutSec, config_parse_sec, 0, offsetof(Mount, timeout_usec)
|
|
Zbigniew Jędrzejewski-Szmek |
f4a676 |
+Mount.TimeoutSec, config_parse_sec_fix_0, 0, offsetof(Mount, timeout_usec)
|
|
Zbigniew Jędrzejewski-Szmek |
f4a676 |
Mount.DirectoryMode, config_parse_mode, 0, offsetof(Mount, directory_mode)
|
|
Zbigniew Jędrzejewski-Szmek |
f4a676 |
Mount.SloppyOptions, config_parse_bool, 0, offsetof(Mount, sloppy_options)
|
|
Zbigniew Jędrzejewski-Szmek |
f4a676 |
Mount.LazyUnmount, config_parse_bool, 0, offsetof(Mount, lazy_unmount)
|
|
Zbigniew Jędrzejewski-Szmek |
f4a676 |
@@ -373,12 +373,12 @@ KILL_CONTEXT_CONFIG_ITEMS(Mount)m4_dnl
|
|
Zbigniew Jędrzejewski-Szmek |
f4a676 |
m4_dnl
|
|
Zbigniew Jędrzejewski-Szmek |
f4a676 |
Automount.Where, config_parse_path, 0, offsetof(Automount, where)
|
|
Zbigniew Jędrzejewski-Szmek |
f4a676 |
Automount.DirectoryMode, config_parse_mode, 0, offsetof(Automount, directory_mode)
|
|
Zbigniew Jędrzejewski-Szmek |
f4a676 |
-Automount.TimeoutIdleSec, config_parse_sec, 0, offsetof(Automount, timeout_idle_usec)
|
|
Zbigniew Jędrzejewski-Szmek |
f4a676 |
+Automount.TimeoutIdleSec, config_parse_sec_fix_0, 0, offsetof(Automount, timeout_idle_usec)
|
|
Zbigniew Jędrzejewski-Szmek |
f4a676 |
m4_dnl
|
|
Zbigniew Jędrzejewski-Szmek |
f4a676 |
Swap.What, config_parse_path, 0, offsetof(Swap, parameters_fragment.what)
|
|
Zbigniew Jędrzejewski-Szmek |
f4a676 |
Swap.Priority, config_parse_int, 0, offsetof(Swap, parameters_fragment.priority)
|
|
Zbigniew Jędrzejewski-Szmek |
f4a676 |
Swap.Options, config_parse_unit_string_printf, 0, offsetof(Swap, parameters_fragment.options)
|
|
Zbigniew Jędrzejewski-Szmek |
f4a676 |
-Swap.TimeoutSec, config_parse_sec, 0, offsetof(Swap, timeout_usec)
|
|
Zbigniew Jędrzejewski-Szmek |
f4a676 |
+Swap.TimeoutSec, config_parse_sec_fix_0, 0, offsetof(Swap, timeout_usec)
|
|
Zbigniew Jędrzejewski-Szmek |
f4a676 |
EXEC_CONTEXT_CONFIG_ITEMS(Swap)m4_dnl
|
|
Zbigniew Jędrzejewski-Szmek |
f4a676 |
CGROUP_CONTEXT_CONFIG_ITEMS(Swap)m4_dnl
|
|
Zbigniew Jędrzejewski-Szmek |
f4a676 |
KILL_CONTEXT_CONFIG_ITEMS(Swap)m4_dnl
|