]> git.decadent.org.uk Git - nfs-utils.git/commitdiff
mount.nfs: Fix retry= to handle lack of reserved port situation
authorFlavio Leitner <flavio.leitner@gmail.com>
Tue, 10 Jul 2007 00:23:27 +0000 (10:23 +1000)
committerNeil Brown <neilb@suse.de>
Tue, 10 Jul 2007 00:23:27 +0000 (10:23 +1000)
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>
support/nfs/conn.c

index 29dbb82c33dd102d3e90d0d0dcb223f7f7bc9c25..9b98682e4e7d08a471c049cdbb0b51d31ed720c1 100644 (file)
@@ -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);
        /* 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:
 
        switch (mnt_pmap->pm_prot) {
        case IPPROTO_UDP: