Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 775f06ab authored by Trond Myklebust's avatar Trond Myklebust
Browse files

SUNRPC: Set the TCP user timeout option on client sockets



Use the TCP_USER_TIMEOUT socket option to advertise to the server
how long we will keep the connection open if there is unacknowledged
data. See RFC5482.

Signed-off-by: default avatarTrond Myklebust <trond.myklebust@primarydata.com>
parent 4876cc77
Loading
Loading
Loading
Loading
+7 −0
Original line number Original line Diff line number Diff line
@@ -2117,6 +2117,7 @@ static int xs_tcp_finish_connecting(struct rpc_xprt *xprt, struct socket *sock)
		unsigned int keepidle = xprt->timeout->to_initval / HZ;
		unsigned int keepidle = xprt->timeout->to_initval / HZ;
		unsigned int keepcnt = xprt->timeout->to_retries + 1;
		unsigned int keepcnt = xprt->timeout->to_retries + 1;
		unsigned int opt_on = 1;
		unsigned int opt_on = 1;
		unsigned int timeo;


		/* TCP Keepalive options */
		/* TCP Keepalive options */
		kernel_setsockopt(sock, SOL_SOCKET, SO_KEEPALIVE,
		kernel_setsockopt(sock, SOL_SOCKET, SO_KEEPALIVE,
@@ -2128,6 +2129,12 @@ static int xs_tcp_finish_connecting(struct rpc_xprt *xprt, struct socket *sock)
		kernel_setsockopt(sock, SOL_TCP, TCP_KEEPCNT,
		kernel_setsockopt(sock, SOL_TCP, TCP_KEEPCNT,
				(char *)&keepcnt, sizeof(keepcnt));
				(char *)&keepcnt, sizeof(keepcnt));


		/* TCP user timeout (see RFC5482) */
		timeo = jiffies_to_msecs(xprt->timeout->to_initval) *
			(xprt->timeout->to_retries + 1);
		kernel_setsockopt(sock, SOL_TCP, TCP_USER_TIMEOUT,
				(char *)&timeo, sizeof(timeo));

		write_lock_bh(&sk->sk_callback_lock);
		write_lock_bh(&sk->sk_callback_lock);


		xs_save_old_callbacks(transport, sk);
		xs_save_old_callbacks(transport, sk);