* [PATCH 15/23] mount.nfs: clean up getport() function
@ 2007-07-28 21:50 Chuck Lever
2007-07-29 23:43 ` J. Bruce Fields
0 siblings, 1 reply; 3+ messages in thread
From: Chuck Lever @ 2007-07-28 21:50 UTC (permalink / raw)
To: neilb; +Cc: nfs
Mostly comment clarification. Also replace some naked undocumented
integers with macros, and make getport() static.
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
---
utils/mount/network.c | 47 ++++++++++++++++++++++++++++-------------------
1 files changed, 28 insertions(+), 19 deletions(-)
diff --git a/utils/mount/network.c b/utils/mount/network.c
index 5653302..c997c4c 100644
--- a/utils/mount/network.c
+++ b/utils/mount/network.c
@@ -121,18 +121,22 @@ int nfs_gethostbyname(const char *hostname, struct sockaddr_in *saddr)
}
/*
- * getport() is very similar to pmap_getport() with
- * the exception this version uses a non-reserve ports
- * instead of reserve ports since reserve ports
- * are not needed for pmap requests.
+ * getport() is very similar to pmap_getport() with the exception that
+ * this version tries to use an ephemeral port, since reserved ports are
+ * not needed for GETPORT queries. This conserves the very limited
+ * reserved port space, which helps reduce failed socket binds
+ * during mount storms.
+ *
+ * A side effect of calling this function is that rpccreateerr is set.
*/
-unsigned short getport(struct sockaddr_in *saddr, unsigned long prog,
- unsigned long vers, unsigned int prot)
+static unsigned short getport(struct sockaddr_in *saddr,
+ unsigned long program,
+ unsigned long version,
+ unsigned int proto)
{
unsigned short port = 0;
int socket;
CLIENT *clnt = NULL;
- struct pmap parms;
enum clnt_stat stat;
saddr->sin_port = htons(PMAPPORT);
@@ -153,25 +157,30 @@ unsigned short getport(struct sockaddr_in *saddr, unsigned long prog,
return 0;
}
- switch (prot) {
+ switch (proto) {
case IPPROTO_UDP:
clnt = clntudp_bufcreate(saddr,
- PMAPPROG, PMAPVERS, TIMEOUT, &socket,
- UDPMSGSIZE, UDPMSGSIZE);
+ PMAPPROG, PMAPVERS,
+ RETRY_TIMEOUT, &socket,
+ RPCSMALLMSGSIZE,
+ RPCSMALLMSGSIZE);
break;
case IPPROTO_TCP:
- clnt = clnttcp_create(saddr,
- PMAPPROG, PMAPVERS, &socket, 50, 500);
+ clnt = clnttcp_create(saddr, PMAPPROG, PMAPVERS, &socket,
+ RPCSMALLMSGSIZE, RPCSMALLMSGSIZE);
break;
}
if (clnt != NULL) {
- parms.pm_prog = prog;
- parms.pm_vers = vers;
- parms.pm_prot = prot;
- parms.pm_port = 0; /* not needed or used */
-
- stat = clnt_call(clnt, PMAPPROC_GETPORT, (xdrproc_t)xdr_pmap,
- (caddr_t)&parms, (xdrproc_t)xdr_u_short, (caddr_t)&port, TIMEOUT);
+ struct pmap parms = {
+ .pm_prog = program,
+ .pm_vers = version,
+ .pm_prot = proto,
+ };
+
+ stat = clnt_call(clnt, PMAPPROC_GETPORT,
+ (xdrproc_t)xdr_pmap, (caddr_t)&parms,
+ (xdrproc_t)xdr_u_short, (caddr_t)&port,
+ TIMEOUT);
if (stat) {
clnt_geterr(clnt, &rpc_createerr.cf_error);
rpc_createerr.cf_stat = stat;
-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems? Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >> http://get.splunk.com/
_______________________________________________
NFS maillist - NFS@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/nfs
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH 15/23] mount.nfs: clean up getport() function
2007-07-28 21:50 [PATCH 15/23] mount.nfs: clean up getport() function Chuck Lever
@ 2007-07-29 23:43 ` J. Bruce Fields
2007-07-30 2:33 ` Chuck Lever
0 siblings, 1 reply; 3+ messages in thread
From: J. Bruce Fields @ 2007-07-29 23:43 UTC (permalink / raw)
To: Chuck Lever; +Cc: neilb, nfs
On Sat, Jul 28, 2007 at 05:50:24PM -0400, Chuck Lever wrote:
> Mostly comment clarification. Also replace some naked undocumented
> integers with macros, and make getport() static.
> @@ -153,25 +157,30 @@ unsigned short getport(struct sockaddr_in *saddr, unsigned long prog,
> return 0;
> }
>
> - switch (prot) {
> + switch (proto) {
> case IPPROTO_UDP:
> clnt = clntudp_bufcreate(saddr,
> - PMAPPROG, PMAPVERS, TIMEOUT, &socket,
> - UDPMSGSIZE, UDPMSGSIZE);
> + PMAPPROG, PMAPVERS,
> + RETRY_TIMEOUT, &socket,
> + RPCSMALLMSGSIZE,
> + RPCSMALLMSGSIZE);
> break;
> case IPPROTO_TCP:
> - clnt = clnttcp_create(saddr,
> - PMAPPROG, PMAPVERS, &socket, 50, 500);
> + clnt = clnttcp_create(saddr, PMAPPROG, PMAPVERS, &socket,
> + RPCSMALLMSGSIZE, RPCSMALLMSGSIZE);
Did you mean to change those final two arguments? (They were different
before, then they're the same after.)
--b.
-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems? Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >> http://get.splunk.com/
_______________________________________________
NFS maillist - NFS@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/nfs
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH 15/23] mount.nfs: clean up getport() function
2007-07-29 23:43 ` J. Bruce Fields
@ 2007-07-30 2:33 ` Chuck Lever
0 siblings, 0 replies; 3+ messages in thread
From: Chuck Lever @ 2007-07-30 2:33 UTC (permalink / raw)
To: J. Bruce Fields; +Cc: neilb, nfs
[-- Attachment #1: Type: text/plain, Size: 1045 bytes --]
J. Bruce Fields wrote:
> On Sat, Jul 28, 2007 at 05:50:24PM -0400, Chuck Lever wrote:
>> Mostly comment clarification. Also replace some naked undocumented
>> integers with macros, and make getport() static.
>> @@ -153,25 +157,30 @@ unsigned short getport(struct sockaddr_in *saddr, unsigned long prog,
>> return 0;
>> }
>>
>> - switch (prot) {
>> + switch (proto) {
>> case IPPROTO_UDP:
>> clnt = clntudp_bufcreate(saddr,
>> - PMAPPROG, PMAPVERS, TIMEOUT, &socket,
>> - UDPMSGSIZE, UDPMSGSIZE);
>> + PMAPPROG, PMAPVERS,
>> + RETRY_TIMEOUT, &socket,
>> + RPCSMALLMSGSIZE,
>> + RPCSMALLMSGSIZE);
>> break;
>> case IPPROTO_TCP:
>> - clnt = clnttcp_create(saddr,
>> - PMAPPROG, PMAPVERS, &socket, 50, 500);
>> + clnt = clnttcp_create(saddr, PMAPPROG, PMAPVERS, &socket,
>> + RPCSMALLMSGSIZE, RPCSMALLMSGSIZE);
>
> Did you mean to change those final two arguments? (They were different
> before, then they're the same after.)
They now match the code in support/nfs/conn.c:clnt_ping().
[-- Attachment #2: chuck.lever.vcf --]
[-- Type: text/x-vcard, Size: 290 bytes --]
begin:vcard
fn:Chuck Lever
n:Lever;Chuck
org:Oracle Corporation;Corporate Architecture: Linux Projects Group
adr:;;1015 Granger Avenue;Ann Arbor;MI;48104;USA
title:Principal Member of Staff
tel;work:+1 248 614 5091
x-mozilla-html:FALSE
url:http://oss.oracle.com/~cel
version:2.1
end:vcard
[-- Attachment #3: Type: text/plain, Size: 315 bytes --]
-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems? Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >> http://get.splunk.com/
[-- Attachment #4: Type: text/plain, Size: 140 bytes --]
_______________________________________________
NFS maillist - NFS@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/nfs
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2007-07-30 2:35 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-07-28 21:50 [PATCH 15/23] mount.nfs: clean up getport() function Chuck Lever
2007-07-29 23:43 ` J. Bruce Fields
2007-07-30 2:33 ` Chuck Lever
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.