Ian Kent 3685ec
autofs-5.0.3 - add configuration paramter UMOUNT_WAIT
Ian Kent 3685ec
Ian Kent 3685ec
From: Ian Kent <raven@themaw.net>
Ian Kent 3685ec
Ian Kent 3685ec
To try and prevent expire delays when trying to umount from a server
Ian Kent 3685ec
that is not available we limit the time that we wait for a response
Ian Kent 3685ec
from the spawned umount process before sending it a SIGTERM signal.
Ian Kent 3685ec
This patch adds a configuration parameter to allow this wait to be
Ian Kent 3685ec
changed if needed.
Ian Kent 3685ec
---
Ian Kent 3685ec
Ian Kent 3685ec
 daemon/spawn.c                 |    2 +-
Ian Kent 3685ec
 include/defaults.h             |    2 ++
Ian Kent 3685ec
 lib/defaults.c                 |   13 +++++++++++++
Ian Kent 3685ec
 man/auto.master.5.in           |    6 ++++++
Ian Kent 3685ec
 redhat/autofs.sysconfig.in     |    4 ++++
Ian Kent 3685ec
 samples/autofs.conf.default.in |    4 ++++
Ian Kent 3685ec
 6 files changed, 30 insertions(+), 1 deletions(-)
Ian Kent 3685ec
Ian Kent 3685ec
Ian Kent 3685ec
diff --git a/daemon/spawn.c b/daemon/spawn.c
Ian Kent 3685ec
index e3c355e..6b26c41 100644
Ian Kent 3685ec
--- a/daemon/spawn.c
Ian Kent 3685ec
+++ b/daemon/spawn.c
Ian Kent 3685ec
@@ -502,7 +502,7 @@ int spawn_umount(unsigned logopt, ...)
Ian Kent 3685ec
 	unsigned int options;
Ian Kent 3685ec
 	unsigned int retries = MTAB_LOCK_RETRIES;
Ian Kent 3685ec
 	int ret, printed = 0;
Ian Kent 3685ec
-	unsigned int wait = 12;
Ian Kent 3685ec
+	unsigned int wait = defaults_get_umount_wait();
Ian Kent 3685ec
 
Ian Kent 3685ec
 #ifdef ENABLE_MOUNT_LOCKING
Ian Kent 3685ec
 	options = SPAWN_OPT_LOCK;
Ian Kent 3685ec
diff --git a/include/defaults.h b/include/defaults.h
Ian Kent 3685ec
index 6e4f52a..12534ec 100644
Ian Kent 3685ec
--- a/include/defaults.h
Ian Kent 3685ec
+++ b/include/defaults.h
Ian Kent 3685ec
@@ -24,6 +24,7 @@
Ian Kent 3685ec
 
Ian Kent 3685ec
 #define DEFAULT_TIMEOUT			600
Ian Kent 3685ec
 #define DEFAULT_NEGATIVE_TIMEOUT	60
Ian Kent 3685ec
+#define DEFAULT_UMOUNT_WAIT		12
Ian Kent 3685ec
 #define DEFAULT_BROWSE_MODE		1
Ian Kent 3685ec
 #define DEFAULT_LOGGING			0
Ian Kent 3685ec
 
Ian Kent 3685ec
@@ -59,6 +60,7 @@ struct ldap_schema *defaults_get_schema(void);
Ian Kent 3685ec
 struct ldap_searchdn *defaults_get_searchdns(void);
Ian Kent 3685ec
 void defaults_free_searchdns(struct ldap_searchdn *);
Ian Kent 3685ec
 unsigned int defaults_get_append_options(void);
Ian Kent 3685ec
+unsigned int defaults_get_umount_wait(void);
Ian Kent 3685ec
 const char *defaults_get_auth_conf_file(void);
Ian Kent 3685ec
 
Ian Kent 3685ec
 #endif
Ian Kent 3685ec
diff --git a/lib/defaults.c b/lib/defaults.c
Ian Kent 3685ec
index 8149549..21d76d2 100644
Ian Kent 3685ec
--- a/lib/defaults.c
Ian Kent 3685ec
+++ b/lib/defaults.c
Ian Kent 3685ec
@@ -45,6 +45,7 @@
Ian Kent 3685ec
 #define ENV_NAME_VALUE_ATTR		"VALUE_ATTRIBUTE"
Ian Kent 3685ec
 
Ian Kent 3685ec
 #define ENV_APPEND_OPTIONS		"APPEND_OPTIONS"
Ian Kent 3685ec
+#define ENV_UMOUNT_WAIT			"UMOUNT_WAIT"
Ian Kent 3685ec
 #define ENV_AUTH_CONF_FILE		"AUTH_CONF_FILE"
Ian Kent 3685ec
 
Ian Kent 3685ec
 static const char *default_master_map_name = DEFAULT_MASTER_MAP_NAME;
Ian Kent 3685ec
@@ -320,6 +321,7 @@ unsigned int defaults_read_config(unsigned int to_syslog)
Ian Kent 3685ec
 		    check_set_config_value(key, ENV_NAME_ENTRY_ATTR, value, to_syslog) ||
Ian Kent 3685ec
 		    check_set_config_value(key, ENV_NAME_VALUE_ATTR, value, to_syslog) ||
Ian Kent 3685ec
 		    check_set_config_value(key, ENV_APPEND_OPTIONS, value, to_syslog) ||
Ian Kent 3685ec
+		    check_set_config_value(key, ENV_UMOUNT_WAIT, value, to_syslog) ||
Ian Kent 3685ec
 		    check_set_config_value(key, ENV_AUTH_CONF_FILE, value, to_syslog))
Ian Kent 3685ec
 			;
Ian Kent 3685ec
 	}
Ian Kent 3685ec
@@ -647,6 +649,17 @@ unsigned int defaults_get_append_options(void)
Ian Kent 3685ec
 	return res;
Ian Kent 3685ec
 }
Ian Kent 3685ec
 
Ian Kent 3685ec
+unsigned int defaults_get_umount_wait(void)
Ian Kent 3685ec
+{
Ian Kent 3685ec
+	long wait;
Ian Kent 3685ec
+
Ian Kent 3685ec
+	wait = get_env_number(ENV_UMOUNT_WAIT);
Ian Kent 3685ec
+	if (wait < 0)
Ian Kent 3685ec
+		wait = DEFAULT_UMOUNT_WAIT;
Ian Kent 3685ec
+
Ian Kent 3685ec
+	return (unsigned int) wait;
Ian Kent 3685ec
+}
Ian Kent 3685ec
+
Ian Kent 3685ec
 const char *defaults_get_auth_conf_file(void)
Ian Kent 3685ec
 {
Ian Kent 3685ec
 	char *cf;
Ian Kent 3685ec
diff --git a/man/auto.master.5.in b/man/auto.master.5.in
Ian Kent 3685ec
index 49a711c..9cc5f02 100644
Ian Kent 3685ec
--- a/man/auto.master.5.in
Ian Kent 3685ec
+++ b/man/auto.master.5.in
Ian Kent 3685ec
@@ -174,6 +174,12 @@ Set the default timeout for caching failed key lookups (program default
Ian Kent 3685ec
 60). If the equivalent command line option is given it will override this
Ian Kent 3685ec
 setting.
Ian Kent 3685ec
 .TP
Ian Kent 3685ec
+.B UMOUNT_WAIT
Ian Kent 3685ec
+Set the default time to wait for a response from a spawned umount(8)
Ian Kent 3685ec
+before sending it a SIGTERM. Note that we still need to wait for the
Ian Kent 3685ec
+RPC layer to timeout before the sub-process exits so this isn't ideal
Ian Kent 3685ec
+but it is the best we can do.
Ian Kent 3685ec
+.TP
Ian Kent 3685ec
 .B BROWSE_MODE
Ian Kent 3685ec
 Maps are browsable by default (program default "yes").
Ian Kent 3685ec
 .TP
Ian Kent 3685ec
diff --git a/redhat/autofs.sysconfig.in b/redhat/autofs.sysconfig.in
Ian Kent 3685ec
index 636763a..ce64feb 100644
Ian Kent 3685ec
--- a/redhat/autofs.sysconfig.in
Ian Kent 3685ec
+++ b/redhat/autofs.sysconfig.in
Ian Kent 3685ec
@@ -14,6 +14,10 @@ TIMEOUT=300
Ian Kent 3685ec
 #
Ian Kent 3685ec
 #NEGATIVE_TIMEOUT=60
Ian Kent 3685ec
 #
Ian Kent 3685ec
+# UMOUNT_WAIT - time to wait for a response from umount(8).
Ian Kent 3685ec
+#
Ian Kent 3685ec
+#UMOUNT_WAIT=12
Ian Kent 3685ec
+#
Ian Kent 3685ec
 # BROWSE_MODE - maps are browsable by default.
Ian Kent 3685ec
 #
Ian Kent 3685ec
 BROWSE_MODE="no"
Ian Kent 3685ec
diff --git a/samples/autofs.conf.default.in b/samples/autofs.conf.default.in
Ian Kent 3685ec
index 086ba4f..0231e1d 100644
Ian Kent 3685ec
--- a/samples/autofs.conf.default.in
Ian Kent 3685ec
+++ b/samples/autofs.conf.default.in
Ian Kent 3685ec
@@ -14,6 +14,10 @@ TIMEOUT=300
Ian Kent 3685ec
 #
Ian Kent 3685ec
 #NEGATIVE_TIMEOUT=60
Ian Kent 3685ec
 #
Ian Kent 3685ec
+# UMOUNT_WAIT - time to wait for a response from umount(8).
Ian Kent 3685ec
+#
Ian Kent 3685ec
+#UMOUNT_WAIT=12
Ian Kent 3685ec
+#
Ian Kent 3685ec
 # BROWSE_MODE - maps are browsable by default.
Ian Kent 3685ec
 #
Ian Kent 3685ec
 BROWSE_MODE="no"