diff options
Diffstat (limited to 'net/sunrpc/xprtsock.c')
| -rw-r--r-- | net/sunrpc/xprtsock.c | 14 | 
1 files changed, 9 insertions, 5 deletions
diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c index 3d02130828d..9c2825827de 100644 --- a/net/sunrpc/xprtsock.c +++ b/net/sunrpc/xprtsock.c @@ -2207,10 +2207,6 @@ static void xs_tcp_setup_socket(struct work_struct *work)  		 */  		xs_tcp_force_close(xprt);  		break; -	case -ECONNREFUSED: -	case -ECONNRESET: -	case -ENETUNREACH: -		/* retry with existing socket, after a delay */  	case 0:  	case -EINPROGRESS:  	case -EALREADY: @@ -2221,6 +2217,10 @@ static void xs_tcp_setup_socket(struct work_struct *work)  		/* Happens, for instance, if the user specified a link  		 * local IPv6 address without a scope-id.  		 */ +	case -ECONNREFUSED: +	case -ECONNRESET: +	case -ENETUNREACH: +		/* retry with existing socket, after a delay */  		goto out;  	}  out_eagain: @@ -2767,9 +2767,13 @@ static struct rpc_xprt *xs_setup_tcp(struct xprt_create *args)  	struct rpc_xprt *xprt;  	struct sock_xprt *transport;  	struct rpc_xprt *ret; +	unsigned int max_slot_table_size = xprt_max_tcp_slot_table_entries; + +	if (args->flags & XPRT_CREATE_INFINITE_SLOTS) +		max_slot_table_size = RPC_MAX_SLOT_TABLE_LIMIT;  	xprt = xs_setup_xprt(args, xprt_tcp_slot_table_entries, -			xprt_max_tcp_slot_table_entries); +			max_slot_table_size);  	if (IS_ERR(xprt))  		return xprt;  	transport = container_of(xprt, struct sock_xprt, xprt);  |