summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNeil Brown <neilb@suse.de>2008-08-28 11:32:33 -0400
committerSteve Dickson <steved@redhat.com>2008-08-28 11:32:33 -0400
commit92e4d5c342f15940362fc2b2df19df0893f0dd13 (patch)
tree1582dfceb6f8494f9dc070ca353461ffa032b971
parent83a8da644b553680e9d578843a6fa0fc9347af0e (diff)
downloadnfs-utils-92e4d5c342f15940362fc2b2df19df0893f0dd13.tar.gz
nfs-utils-92e4d5c342f15940362fc2b2df19df0893f0dd13.tar.xz
nfs-utils-92e4d5c342f15940362fc2b2df19df0893f0dd13.zip
mount: enable retry for nfs23 to set the correct protocol for mount.
Use a connected port when talking to portmap via UDP. This allows us to get ICMP errors reported back so we can avoid timeouts. Also catch the error (RPC_CANTRECV) properly in getport. Signed-off-by: NeilBrown <neilb@suse.de> Signed-off-by: Steve Dickson <steved@redhat.com>
-rw-r--r--utils/mount/network.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/utils/mount/network.c b/utils/mount/network.c
index 0023769..2db694d 100644
--- a/utils/mount/network.c
+++ b/utils/mount/network.c
@@ -465,7 +465,7 @@ static unsigned short getport(struct sockaddr_in *saddr,
bind_saddr = *saddr;
bind_saddr.sin_port = htons(PMAPPORT);
- socket = get_socket(&bind_saddr, proto, PMAP_TIMEOUT, FALSE, FALSE);
+ socket = get_socket(&bind_saddr, proto, PMAP_TIMEOUT, FALSE, TRUE);
if (socket == RPC_ANYSOCK) {
if (proto == IPPROTO_TCP &&
rpc_createerr.cf_error.re_errno == ETIMEDOUT)
@@ -554,6 +554,7 @@ static int probe_port(clnt_addr_t *server, const unsigned long *versions,
}
if (rpc_createerr.cf_stat != RPC_PROGNOTREGISTERED &&
rpc_createerr.cf_stat != RPC_TIMEDOUT &&
+ rpc_createerr.cf_stat != RPC_CANTRECV &&
rpc_createerr.cf_stat != RPC_PROGVERSMISMATCH)
goto out_bad;
@@ -562,7 +563,8 @@ static int probe_port(clnt_addr_t *server, const unsigned long *versions,
continue;
p_prot = protos;
}
- if (rpc_createerr.cf_stat == RPC_TIMEDOUT)
+ if (rpc_createerr.cf_stat == RPC_TIMEDOUT ||
+ rpc_createerr.cf_stat == RPC_CANTRECV)
goto out_bad;
if (vers || !*++p_vers)