diff options
Diffstat (limited to 'net/sunrpc/xprtsock.c')
-rw-r--r-- | net/sunrpc/xprtsock.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c index ee03d35677d9..208a7634b916 100644 --- a/net/sunrpc/xprtsock.c +++ b/net/sunrpc/xprtsock.c | |||
@@ -2112,6 +2112,19 @@ static int xs_tcp_finish_connecting(struct rpc_xprt *xprt, struct socket *sock) | |||
2112 | 2112 | ||
2113 | if (!transport->inet) { | 2113 | if (!transport->inet) { |
2114 | struct sock *sk = sock->sk; | 2114 | struct sock *sk = sock->sk; |
2115 | unsigned int keepidle = xprt->timeout->to_initval / HZ; | ||
2116 | unsigned int keepcnt = xprt->timeout->to_retries + 1; | ||
2117 | unsigned int opt_on = 1; | ||
2118 | |||
2119 | /* TCP Keepalive options */ | ||
2120 | kernel_setsockopt(sock, SOL_SOCKET, SO_KEEPALIVE, | ||
2121 | (char *)&opt_on, sizeof(opt_on)); | ||
2122 | kernel_setsockopt(sock, SOL_TCP, TCP_KEEPIDLE, | ||
2123 | (char *)&keepidle, sizeof(keepidle)); | ||
2124 | kernel_setsockopt(sock, SOL_TCP, TCP_KEEPINTVL, | ||
2125 | (char *)&keepidle, sizeof(keepidle)); | ||
2126 | kernel_setsockopt(sock, SOL_TCP, TCP_KEEPCNT, | ||
2127 | (char *)&keepcnt, sizeof(keepcnt)); | ||
2115 | 2128 | ||
2116 | write_lock_bh(&sk->sk_callback_lock); | 2129 | write_lock_bh(&sk->sk_callback_lock); |
2117 | 2130 | ||