|
Ian Kent |
5ec16e |
autofs-5.0.6 - reinstate singleton mount probe
|
|
Ian Kent |
5ec16e |
|
|
Ian Kent |
5ec16e |
From: Ian Kent <ikent@redhat.com>
|
|
Ian Kent |
5ec16e |
|
|
Ian Kent |
5ec16e |
The change to have the kernel process text based mount options can
|
|
Ian Kent |
5ec16e |
introduce lengthy timeout waits when attempting a mount to a host
|
|
Ian Kent |
5ec16e |
that is not available.
|
|
Ian Kent |
5ec16e |
|
|
Ian Kent |
5ec16e |
To avoid these waits autofs should probe singleton mounts if it
|
|
Ian Kent |
5ec16e |
thinks mount.nfs will pass text options to the kernel (which of
|
|
Ian Kent |
5ec16e |
course implies the kernel supports this).
|
|
Ian Kent |
5ec16e |
---
|
|
Ian Kent |
5ec16e |
|
|
Ian Kent |
5ec16e |
CHANGELOG | 1 +
|
|
Ian Kent |
5ec16e |
daemon/automount.c | 7 +++++++
|
|
Ian Kent |
5ec16e |
include/mounts.h | 1 +
|
|
Ian Kent |
5ec16e |
modules/replicated.c | 18 ++++++++++++++++--
|
|
Ian Kent |
5ec16e |
4 files changed, 25 insertions(+), 2 deletions(-)
|
|
Ian Kent |
5ec16e |
|
|
Ian Kent |
5ec16e |
|
|
Ian Kent |
5ec16e |
--- autofs-5.0.6.orig/CHANGELOG
|
|
Ian Kent |
5ec16e |
+++ autofs-5.0.6/CHANGELOG
|
|
Ian Kent |
5ec16e |
@@ -26,6 +26,7 @@
|
|
Ian Kent |
5ec16e |
- ignore duplicate exports in auto.net.
|
|
Ian Kent |
5ec16e |
- add kernel verion check function.
|
|
Ian Kent |
5ec16e |
- add function to check mount.nfs version.
|
|
Ian Kent |
5ec16e |
+- reinstate singleton mount probe.
|
|
Ian Kent |
5ec16e |
|
|
Ian Kent |
5ec16e |
28/06/2011 autofs-5.0.6
|
|
Ian Kent |
5ec16e |
-----------------------
|
|
Ian Kent |
5ec16e |
--- autofs-5.0.6.orig/daemon/automount.c
|
|
Ian Kent |
5ec16e |
+++ autofs-5.0.6/daemon/automount.c
|
|
Ian Kent |
5ec16e |
@@ -51,6 +51,9 @@ const char *libdir = AUTOFS_LIB_DIR; /*
|
|
Ian Kent |
5ec16e |
const char *mapdir = AUTOFS_MAP_DIR; /* Location of mount maps */
|
|
Ian Kent |
5ec16e |
const char *confdir = AUTOFS_CONF_DIR; /* Location of autofs config file */
|
|
Ian Kent |
5ec16e |
|
|
Ian Kent |
5ec16e |
+unsigned int nfs_mount_uses_string_options = 0;
|
|
Ian Kent |
5ec16e |
+static struct nfs_mount_vers vers, check = {1, 1, 1};
|
|
Ian Kent |
5ec16e |
+
|
|
Ian Kent |
5ec16e |
/* autofs fifo name prefix */
|
|
Ian Kent |
5ec16e |
const char *fifodir = AUTOFS_FIFO_DIR "/autofs.fifo";
|
|
Ian Kent |
5ec16e |
|
|
Ian Kent |
5ec16e |
@@ -1273,6 +1276,8 @@ static int do_hup_signal(struct master *
|
|
Ian Kent |
5ec16e |
if (status)
|
|
Ian Kent |
5ec16e |
fatal(status);
|
|
Ian Kent |
5ec16e |
|
|
Ian Kent |
5ec16e |
+ nfs_mount_uses_string_options = check_nfs_mount_version(&vers, &check);
|
|
Ian Kent |
5ec16e |
+
|
|
Ian Kent |
5ec16e |
master_mutex_lock();
|
|
Ian Kent |
5ec16e |
if (master->reading) {
|
|
Ian Kent |
5ec16e |
status = pthread_mutex_unlock(&mrc.mutex);
|
|
Ian Kent |
5ec16e |
@@ -1936,6 +1941,8 @@ int main(int argc, char *argv[])
|
|
Ian Kent |
5ec16e |
|
|
Ian Kent |
5ec16e |
defaults_read_config(0);
|
|
Ian Kent |
5ec16e |
|
|
Ian Kent |
5ec16e |
+ nfs_mount_uses_string_options = check_nfs_mount_version(&vers, &check);
|
|
Ian Kent |
5ec16e |
+
|
|
Ian Kent |
5ec16e |
kpkt_len = get_kpkt_len();
|
|
Ian Kent |
5ec16e |
timeout = defaults_get_timeout();
|
|
Ian Kent |
5ec16e |
ghost = defaults_get_browse_mode();
|
|
Ian Kent |
5ec16e |
--- autofs-5.0.6.orig/include/mounts.h
|
|
Ian Kent |
5ec16e |
+++ autofs-5.0.6/include/mounts.h
|
|
Ian Kent |
5ec16e |
@@ -95,6 +95,7 @@ struct nfs_mount_vers {
|
|
Ian Kent |
5ec16e |
unsigned int fix;
|
|
Ian Kent |
5ec16e |
};
|
|
Ian Kent |
5ec16e |
int check_nfs_mount_version(struct nfs_mount_vers *, struct nfs_mount_vers *);
|
|
Ian Kent |
5ec16e |
+extern unsigned int nfs_mount_uses_string_options;
|
|
Ian Kent |
5ec16e |
|
|
Ian Kent |
5ec16e |
unsigned int query_kproto_ver(void);
|
|
Ian Kent |
5ec16e |
unsigned int get_kver_major(void);
|
|
Ian Kent |
5ec16e |
--- autofs-5.0.6.orig/modules/replicated.c
|
|
Ian Kent |
5ec16e |
+++ autofs-5.0.6/modules/replicated.c
|
|
Ian Kent |
5ec16e |
@@ -901,6 +901,7 @@ int prune_host_list(unsigned logopt, str
|
|
Ian Kent |
5ec16e |
unsigned int v2_udp_count, v3_udp_count, v4_udp_count;
|
|
Ian Kent |
5ec16e |
unsigned int max_udp_count, max_tcp_count, max_count;
|
|
Ian Kent |
5ec16e |
int status;
|
|
Ian Kent |
5ec16e |
+ int kern_vers;
|
|
Ian Kent |
5ec16e |
|
|
Ian Kent |
5ec16e |
if (!*list)
|
|
Ian Kent |
5ec16e |
return 0;
|
|
Ian Kent |
5ec16e |
@@ -920,9 +921,22 @@ int prune_host_list(unsigned logopt, str
|
|
Ian Kent |
5ec16e |
* or a single host entry whose proximity isn't local. If so
|
|
Ian Kent |
5ec16e |
* return immediately as we don't want to add probe latency for
|
|
Ian Kent |
5ec16e |
* the common case of a single filesystem mount request.
|
|
Ian Kent |
5ec16e |
+ *
|
|
Ian Kent |
5ec16e |
+ * But, if the kernel understands text nfs mount options then
|
|
Ian Kent |
5ec16e |
+ * mount.nfs most likely bypasses its probing and lets the kernel
|
|
Ian Kent |
5ec16e |
+ * do all the work. This can lead to long timeouts for hosts that
|
|
Ian Kent |
5ec16e |
+ * are not available so check the kernel version and mount.nfs
|
|
Ian Kent |
5ec16e |
+ * version and probe singleton mounts if the kernel version is
|
|
Ian Kent |
5ec16e |
+ * greater than 2.6.22 and mount.nfs version is greater than 1.1.1.
|
|
Ian Kent |
5ec16e |
*/
|
|
Ian Kent |
5ec16e |
- if (!this || !this->next)
|
|
Ian Kent |
5ec16e |
- return 1;
|
|
Ian Kent |
5ec16e |
+ if (nfs_mount_uses_string_options &&
|
|
Ian Kent |
5ec16e |
+ (kern_vers = linux_version_code()) > KERNEL_VERSION(2, 6, 22)) {
|
|
Ian Kent |
5ec16e |
+ if (!this)
|
|
Ian Kent |
5ec16e |
+ return 1;
|
|
Ian Kent |
5ec16e |
+ } else {
|
|
Ian Kent |
5ec16e |
+ if (!this || !this->next)
|
|
Ian Kent |
5ec16e |
+ return 1;
|
|
Ian Kent |
5ec16e |
+ }
|
|
Ian Kent |
5ec16e |
|
|
Ian Kent |
5ec16e |
proximity = this->proximity;
|
|
Ian Kent |
5ec16e |
while (this) {
|