diff mbox series

[net-next,v2] net: Modify sock_set_keepalive() for more scenarios

Message ID 20210804032856.4005-1-yajun.deng@linux.dev (mailing list archive)
State Not Applicable
Headers show
Series [net-next,v2] net: Modify sock_set_keepalive() for more scenarios | expand

Commit Message

Yajun Deng Aug. 4, 2021, 3:28 a.m. UTC
Add 2nd parameter in sock_set_keepalive(), let the caller decide
whether to set. This can be applied to more scenarios.

v2:
 - add the change in fs/dlm.

Signed-off-by: Yajun Deng <yajun.deng@linux.dev>
---
 fs/dlm/lowcomms.c     |  2 +-
 include/net/sock.h    |  2 +-
 net/core/filter.c     |  4 +---
 net/core/sock.c       | 10 ++++------
 net/mptcp/sockopt.c   |  4 +---
 net/rds/tcp_listen.c  |  2 +-
 net/smc/af_smc.c      |  2 +-
 net/sunrpc/xprtsock.c |  2 +-
 8 files changed, 11 insertions(+), 17 deletions(-)

Comments

Leon Romanovsky Aug. 4, 2021, 5:47 a.m. UTC | #1
On Wed, Aug 04, 2021 at 11:28:56AM +0800, Yajun Deng wrote:
> Add 2nd parameter in sock_set_keepalive(), let the caller decide
> whether to set. This can be applied to more scenarios.
> 
> v2:
>  - add the change in fs/dlm.
> 
> Signed-off-by: Yajun Deng <yajun.deng@linux.dev>
> ---
>  fs/dlm/lowcomms.c     |  2 +-
>  include/net/sock.h    |  2 +-
>  net/core/filter.c     |  4 +---
>  net/core/sock.c       | 10 ++++------
>  net/mptcp/sockopt.c   |  4 +---
>  net/rds/tcp_listen.c  |  2 +-
>  net/smc/af_smc.c      |  2 +-
>  net/sunrpc/xprtsock.c |  2 +-
>  8 files changed, 11 insertions(+), 17 deletions(-)

1. Don't add changelogs in the commit messages and put them under --- marker.
2. Add an explanation to the commit message WHY this change is necessary
and HOW will it be used.
3. Drop all your double NOT in front of values (!!val) and rely on C
that casts int to bool naturally.

Thanks
diff mbox series

Patch

diff --git a/fs/dlm/lowcomms.c b/fs/dlm/lowcomms.c
index 0ea9ae35da0b..5d748ce4d876 100644
--- a/fs/dlm/lowcomms.c
+++ b/fs/dlm/lowcomms.c
@@ -1356,7 +1356,7 @@  static int tcp_create_listen_sock(struct listen_connection *con,
 		log_print("Can't bind to port %d", dlm_config.ci_tcp_port);
 		goto create_out;
 	}
-	sock_set_keepalive(sock->sk);
+	sock_set_keepalive(sock->sk, true);
 
 	result = sock->ops->listen(sock, 5);
 	if (result < 0) {
diff --git a/include/net/sock.h b/include/net/sock.h
index ff1be7e7e90b..0aae26159549 100644
--- a/include/net/sock.h
+++ b/include/net/sock.h
@@ -2772,7 +2772,7 @@  int sock_set_timestamping(struct sock *sk, int optname,
 
 void sock_enable_timestamps(struct sock *sk);
 void sock_no_linger(struct sock *sk);
-void sock_set_keepalive(struct sock *sk);
+void sock_set_keepalive(struct sock *sk, bool valbool);
 void sock_set_priority(struct sock *sk, u32 priority);
 void sock_set_rcvbuf(struct sock *sk, int val);
 void sock_set_mark(struct sock *sk, u32 val);
diff --git a/net/core/filter.c b/net/core/filter.c
index 6f493ef5bb14..c73caa53992e 100644
--- a/net/core/filter.c
+++ b/net/core/filter.c
@@ -4752,9 +4752,7 @@  static int _bpf_setsockopt(struct sock *sk, int level, int optname,
 			ret = sock_bindtoindex(sk, ifindex, false);
 			break;
 		case SO_KEEPALIVE:
-			if (sk->sk_prot->keepalive)
-				sk->sk_prot->keepalive(sk, valbool);
-			sock_valbool_flag(sk, SOCK_KEEPOPEN, valbool);
+			sock_set_keepalive(sk, !!valbool);
 			break;
 		case SO_REUSEPORT:
 			sk->sk_reuseport = valbool;
diff --git a/net/core/sock.c b/net/core/sock.c
index 9671c32e6ef5..7041e6355ae1 100644
--- a/net/core/sock.c
+++ b/net/core/sock.c
@@ -892,12 +892,12 @@  int sock_set_timestamping(struct sock *sk, int optname,
 	return 0;
 }
 
-void sock_set_keepalive(struct sock *sk)
+void sock_set_keepalive(struct sock *sk, bool valbool)
 {
 	lock_sock(sk);
 	if (sk->sk_prot->keepalive)
-		sk->sk_prot->keepalive(sk, true);
-	sock_valbool_flag(sk, SOCK_KEEPOPEN, true);
+		sk->sk_prot->keepalive(sk, valbool);
+	sock_valbool_flag(sk, SOCK_KEEPOPEN, valbool);
 	release_sock(sk);
 }
 EXPORT_SYMBOL(sock_set_keepalive);
@@ -1060,9 +1060,7 @@  int sock_setsockopt(struct socket *sock, int level, int optname,
 		break;
 
 	case SO_KEEPALIVE:
-		if (sk->sk_prot->keepalive)
-			sk->sk_prot->keepalive(sk, valbool);
-		sock_valbool_flag(sk, SOCK_KEEPOPEN, valbool);
+		sock_set_keepalive(sk, !!valbool);
 		break;
 
 	case SO_OOBINLINE:
diff --git a/net/mptcp/sockopt.c b/net/mptcp/sockopt.c
index 8c03afac5ca0..879b8381055c 100644
--- a/net/mptcp/sockopt.c
+++ b/net/mptcp/sockopt.c
@@ -81,9 +81,7 @@  static void mptcp_sol_socket_sync_intval(struct mptcp_sock *msk, int optname, in
 			sock_valbool_flag(ssk, SOCK_DBG, !!val);
 			break;
 		case SO_KEEPALIVE:
-			if (ssk->sk_prot->keepalive)
-				ssk->sk_prot->keepalive(ssk, !!val);
-			sock_valbool_flag(ssk, SOCK_KEEPOPEN, !!val);
+			sock_set_keepalive(ssk, !!val);
 			break;
 		case SO_PRIORITY:
 			ssk->sk_priority = val;
diff --git a/net/rds/tcp_listen.c b/net/rds/tcp_listen.c
index 09cadd556d1e..b69ebb3f424a 100644
--- a/net/rds/tcp_listen.c
+++ b/net/rds/tcp_listen.c
@@ -44,7 +44,7 @@  void rds_tcp_keepalive(struct socket *sock)
 	int keepidle = 5; /* send a probe 'keepidle' secs after last data */
 	int keepcnt = 5; /* number of unack'ed probes before declaring dead */
 
-	sock_set_keepalive(sock->sk);
+	sock_set_keepalive(sock->sk, true);
 	tcp_sock_set_keepcnt(sock->sk, keepcnt);
 	tcp_sock_set_keepidle(sock->sk, keepidle);
 	/* KEEPINTVL is the interval between successive probes. We follow
diff --git a/net/smc/af_smc.c b/net/smc/af_smc.c
index 898389611ae8..ad8f4302037f 100644
--- a/net/smc/af_smc.c
+++ b/net/smc/af_smc.c
@@ -68,7 +68,7 @@  static void smc_set_keepalive(struct sock *sk, int val)
 {
 	struct smc_sock *smc = smc_sk(sk);
 
-	smc->clcsock->sk->sk_prot->keepalive(smc->clcsock->sk, val);
+	sock_set_keepalive(smc->clcsock->sk, !!val);
 }
 
 static struct smc_hashinfo smc_v4_hashinfo = {
diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c
index e573dcecdd66..306a332f8d28 100644
--- a/net/sunrpc/xprtsock.c
+++ b/net/sunrpc/xprtsock.c
@@ -2127,7 +2127,7 @@  static void xs_tcp_set_socket_timeouts(struct rpc_xprt *xprt,
 	spin_unlock(&xprt->transport_lock);
 
 	/* TCP Keepalive options */
-	sock_set_keepalive(sock->sk);
+	sock_set_keepalive(sock->sk, true);
 	tcp_sock_set_keepidle(sock->sk, keepidle);
 	tcp_sock_set_keepintvl(sock->sk, keepidle);
 	tcp_sock_set_keepcnt(sock->sk, keepcnt);