From: Flavio Leitner <flavio.leitner@gmail.com>
Date: Tue, 10 Jul 2007 00:23:27 +0000 (+1000)
Subject: mount.nfs: Fix retry= to handle lack of reserved port situation
X-Git-Tag: nfs-utils-1-1-1~160
X-Git-Url: https://git.decadent.org.uk/gitweb/?a=commitdiff_plain;h=2bb403d1547790e731e5b151f9ef41880a6eb6c7;p=nfs-utils.git

mount.nfs: Fix retry= to handle lack of reserved port situation

In the case of several (>500) mounts running at the same time
with -o tcp, the number of attempts that succeed is about 300-500
because it run out of priviledged port (they are busy in TIME_WAIT
state).

Signed-off-by: Flavio Leitner <flavio.leitner@gmail.com>
Signed-off-by: Neil Brown <neilb@suse.de>
---

diff --git a/support/nfs/conn.c b/support/nfs/conn.c
index 29dbb82..9b98682 100644
--- a/support/nfs/conn.c
+++ b/support/nfs/conn.c
@@ -200,6 +200,14 @@ CLIENT *mnt_openclnt(clnt_addr_t *mnt_server, int *msock)
 	/* contact the mount daemon via TCP */
 	mnt_saddr->sin_port = htons((u_short)mnt_pmap->pm_port);
 	*msock = get_socket(mnt_saddr, mnt_pmap->pm_prot, TRUE, FALSE);
+	if (*msock == RPC_ANYSOCK) {
+		if (rpc_createerr.cf_error.re_errno == EADDRINUSE)
+			/* Probably in-use by a TIME_WAIT connection,
+			 * It is worth waiting a while and trying again.
+			 */
+			rpc_createerr.cf_stat = RPC_TIMEDOUT;
+		return NULL;
+	}
 
 	switch (mnt_pmap->pm_prot) {
 	case IPPROTO_UDP: