diff options
Diffstat (limited to 'net/sunrpc/svcsock.c')
| -rw-r--r-- | net/sunrpc/svcsock.c | 21 | 
1 files changed, 21 insertions, 0 deletions
diff --git a/net/sunrpc/svcsock.c b/net/sunrpc/svcsock.c index 57625f64efd5..a4bc98265d88 100644 --- a/net/sunrpc/svcsock.c +++ b/net/sunrpc/svcsock.c @@ -438,6 +438,21 @@ static int svc_tcp_has_wspace(struct svc_xprt *xprt)  	return !test_bit(SOCK_NOSPACE, &svsk->sk_sock->flags);  } +static void svc_tcp_kill_temp_xprt(struct svc_xprt *xprt) +{ +	struct svc_sock *svsk; +	struct socket *sock; +	struct linger no_linger = { +		.l_onoff = 1, +		.l_linger = 0, +	}; + +	svsk = container_of(xprt, struct svc_sock, sk_xprt); +	sock = svsk->sk_sock; +	kernel_setsockopt(sock, SOL_SOCKET, SO_LINGER, +			  (char *)&no_linger, sizeof(no_linger)); +} +  /*   * See net/ipv6/ip_sockglue.c : ip_cmsg_recv_pktinfo   */ @@ -648,6 +663,10 @@ static struct svc_xprt *svc_udp_accept(struct svc_xprt *xprt)  	return NULL;  } +static void svc_udp_kill_temp_xprt(struct svc_xprt *xprt) +{ +} +  static struct svc_xprt *svc_udp_create(struct svc_serv *serv,  				       struct net *net,  				       struct sockaddr *sa, int salen, @@ -667,6 +686,7 @@ static struct svc_xprt_ops svc_udp_ops = {  	.xpo_has_wspace = svc_udp_has_wspace,  	.xpo_accept = svc_udp_accept,  	.xpo_secure_port = svc_sock_secure_port, +	.xpo_kill_temp_xprt = svc_udp_kill_temp_xprt,  };  static struct svc_xprt_class svc_udp_class = { @@ -1242,6 +1262,7 @@ static struct svc_xprt_ops svc_tcp_ops = {  	.xpo_has_wspace = svc_tcp_has_wspace,  	.xpo_accept = svc_tcp_accept,  	.xpo_secure_port = svc_sock_secure_port, +	.xpo_kill_temp_xprt = svc_tcp_kill_temp_xprt,  };  static struct svc_xprt_class svc_tcp_class = {  | 
