All of lore.kernel.org
 help / color / mirror / Atom feed
From: Chuck Lever <chuck.lever@oracle.com>
To: Trond Myklebust <Trond.Myklebust@netapp.com>
Cc: nfsv4@linux-nfs.org, nfs@lists.sourceforge.net
Subject: Re: [NFS] [PATCH 2/7] SUNRPC: Fix TCP rebinding logic
Date: Wed, 07 Nov 2007 18:28:18 -0500	[thread overview]
Message-ID: <47324A12.9080201@oracle.com> (raw)
In-Reply-To: <1194476901.7504.66.camel@heimdal.trondhjem.org>

[-- Attachment #1: Type: text/plain, Size: 2228 bytes --]

Trond Myklebust wrote:
> On Wed, 2007-11-07 at 17:48 -0500, Chuck Lever wrote:
>> Trond Myklebust wrote:
>>>  static int xs_bind4(struct sock_xprt *transport, struct socket *sock)
>>>  {
>>>  	struct sockaddr_in myaddr = {
>>>  		.sin_family = AF_INET,
>>>  	};
>>>  	struct sockaddr_in *sa;
>>> -	int err;
>>> -	unsigned short port = transport->port;
>>> +	int err, nloop = 0;
>>> +	unsigned short port = xs_get_srcport(transport, sock);
>>> +	unsigned short last;
>>>  
>>> -	if (!transport->xprt.resvport)
>>> -		port = 0;
>>>  	sa = (struct sockaddr_in *)&transport->addr;
>>>  	myaddr.sin_addr = sa->sin_addr;
>>>  	do {
>>>  		myaddr.sin_port = htons(port);
>>>  		err = kernel_bind(sock, (struct sockaddr *) &myaddr,
>>>  						sizeof(myaddr));
>>> -		if (!transport->xprt.resvport)
>>> +		if (port == 0)
>>>  			break;
>>>  		if (err == 0) {
>>>  			transport->port = port;
>>>  			break;
>>>  		}
>>> -		if (port <= xprt_min_resvport)
>>> -			port = xprt_max_resvport;
>>> -		else
>>> -			port--;
>>> -	} while (err == -EADDRINUSE && port != transport->port);
>>> +		last = port;
>>> +		port = xs_next_srcport(transport, sock, port);
>>> +		if (port > last)
>>> +			nloop++;
>> It seems like there are cases where a user can adjust the port range and 
>> it would defeat this check.  For example, if the port range is 30 to 40, 
>> and the user changes it to 10 to 20, we keep looping.
> 
> Yes, but once we hit 10, then the nloop gets bumped. It is guaranteed to
> get bumped if we hit 0, or if the administrator increases the minimum
> port number past the current one.
> 
>> Doesn't breaking out of the loop break "Hard" NFS requests?
> 
> We've always had to deal with breaking out of the loops. If we don't, we
> will deadlock the computer.

In that case it might make sense to allow some scheduling between each 
socket bind attempt, and do only a single pass over the port range 
before breaking out.  Then you could forget about whether the range 
changes -- you will use the new range the next time a connection is 
attempted.

> If this is a hard mount, then the only result should normally be that we
> abort the connection,  time out, and then try again. This has been the
> behaviour for quite some while.

[-- Attachment #2: chuck.lever.vcf --]
[-- Type: text/x-vcard, Size: 259 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
version:2.1
end:vcard


[-- Attachment #3: Type: text/plain, Size: 138 bytes --]

_______________________________________________
NFSv4 mailing list
NFSv4@linux-nfs.org
http://linux-nfs.org/cgi-bin/mailman/listinfo/nfsv4

  reply	other threads:[~2007-11-07 23:28 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-11-07  0:39 [PATCH 0/7] Improve the NFS/TCP reconnection code Trond Myklebust
2007-11-07  0:39 ` [PATCH 1/7] SUNRPC: Fix a race in xs_tcp_state_change() Trond Myklebust
2007-11-07 22:21   ` Chuck Lever
2007-11-07 22:32     ` [NFS] " Trond Myklebust
2007-11-07 23:47       ` setclientid: string in use on NFS v4 share on Debian Etch & hosts file "solution" Matt Weatherford
2007-11-09 19:55         ` J. Bruce Fields
2007-11-08 15:40       ` [NFS] [PATCH 1/7] SUNRPC: Fix a race in xs_tcp_state_change() Chuck Lever
2007-11-08 16:12         ` Trond Myklebust
2007-11-07  0:39 ` [PATCH 2/7] SUNRPC: Fix TCP rebinding logic Trond Myklebust
2007-11-07 22:48   ` Chuck Lever
2007-11-07 23:08     ` Trond Myklebust
2007-11-07 23:28       ` Chuck Lever [this message]
2007-11-07 23:47         ` Trond Myklebust
2007-11-09 13:35   ` Talpey, Thomas
2007-11-07  0:39 ` [PATCH 3/7] SUNRPC: Allow the client to detect if the TCP connection is closed Trond Myklebust
2007-11-09 14:04   ` Talpey, Thomas
2007-11-09 14:33     ` [NFS] " Trond Myklebust
2007-11-09 14:35       ` Talpey, Thomas
2007-11-09 14:48         ` Trond Myklebust
2007-11-09 15:25           ` Talpey, Thomas
2007-11-09 15:32             ` [NFS] " Trond Myklebust
2007-11-09 16:53               ` Talpey, Thomas
2007-11-09 17:37                 ` Trond Myklebust
2007-11-09 17:52                   ` [NFS] " Talpey, Thomas
2007-11-09 18:21                     ` Trond Myklebust
2007-11-07  0:39 ` [PATCH 4/7] SUNRPC: Use shutdown() instead of close() when disconnecting a TCP socket Trond Myklebust
2007-11-07 23:11   ` [NFS] " Chuck Lever
2007-11-07 23:59     ` Trond Myklebust
2007-11-09 13:38   ` Talpey, Thomas
2007-11-09 13:51     ` [NFS] " Trond Myklebust
2007-11-07  0:40 ` [PATCH 5/7] SUNRPC: xprt_autoclose() should not call xprt_disconnect() Trond Myklebust
2007-11-09 13:56   ` [NFS] " Talpey, Thomas
2007-11-07  0:40 ` [PATCH 6/7] SUNRPC: Make call_status()/call_decode() call xprt_force_disconnect() Trond Myklebust
2007-11-07 23:15   ` [NFS] " Chuck Lever
2007-11-07  0:40 ` [PATCH 7/7] SUNRPC: Rename xprt_disconnect() Trond Myklebust
2007-11-07 23:16   ` [NFS] " Chuck Lever
2007-11-08  0:01     ` Trond Myklebust

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=47324A12.9080201@oracle.com \
    --to=chuck.lever@oracle.com \
    --cc=Trond.Myklebust@netapp.com \
    --cc=nfs@lists.sourceforge.net \
    --cc=nfsv4@linux-nfs.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.