All of lore.kernel.org
 help / color / mirror / Atom feed
* [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.