Blob Blame History Raw
autofs-5.0.7 - dont probe rdma mounts

From: Ian Kent <raven@themaw.net>

Since the change to pass text nfs mount options drectly to the kernel all autofs
mount requests now probe server availability. This was because of long delays
mounting from servers that aren't responding.

This caused mounts requesting the rdma protocol to fail if udp or tcp was also
not available from the server.

Since, AFAICT the rmda protocol can't be used with RPC fromn userspace, the only
way to work around it is to not probe servers when rdma is requested.
---
 CHANGELOG           |    1 +
 modules/mount_nfs.c |   13 ++++++++++++-
 2 files changed, 13 insertions(+), 1 deletion(-)

diff --git a/CHANGELOG b/CHANGELOG
index 50e83d7..f9bc987 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -44,6 +44,7 @@
 - document allowed map sources in auto.master.
 - add enable sloppy mount option to configure.
 - fix interface address null check.
+- dont probe rdma mounts.
 
 25/07/2012 autofs-5.0.7
 =======================
diff --git a/modules/mount_nfs.c b/modules/mount_nfs.c
index e61320b..5424d74 100644
--- a/modules/mount_nfs.c
+++ b/modules/mount_nfs.c
@@ -71,6 +71,7 @@ int mount_mount(struct autofs_point *ap, const char *root, const char *name, int
 	int nosymlink = 0;
 	int port = -1;
 	int ro = 0;            /* Set if mount bind should be read-only */
+	int rdma = 0;
 
 	if (ap->flags & MOUNT_FLAG_REMOUNT)
 		return 0;
@@ -124,6 +125,11 @@ int mount_mount(struct autofs_point *ap, const char *root, const char *name, int
 				end--;
 
 			o_len = end - cp + 1;
+
+			if (strncmp("proto=rdma", cp, o_len) == 0 ||
+				   strncmp("rdma", cp, o_len) == 0)
+				rdma = 1;
+
 			if (strncmp("nosymlink", cp, o_len) == 0) {
 				warn(ap->logopt, MODPREFIX
 				     "the \"nosymlink\" option is depricated "
@@ -170,7 +176,12 @@ int mount_mount(struct autofs_point *ap, const char *root, const char *name, int
 		info(ap->logopt, MODPREFIX "no hosts available");
 		return 1;
 	}
-	prune_host_list(ap->logopt, &hosts, vers, port);
+	/*
+	 * We can't probe protocol rdma so leave it to mount.nfs(8)
+	 * and and suffer the delay if a server isn't available.
+	 */
+	if (!rdma)
+		prune_host_list(ap->logopt, &hosts, vers, port);
 
 	if (!hosts) {
 		info(ap->logopt, MODPREFIX "no hosts available");