From 6d03a247468059b0e59c821ef39e6762d4d6fc30 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Wed, 19 Jun 2024 23:00:51 +0200 Subject: Merging upstream version 6.9.2. Signed-off-by: Daniel Baumann --- net/mptcp/sockopt.c | 62 +++-------------------------------------------------- 1 file changed, 3 insertions(+), 59 deletions(-) (limited to 'net/mptcp/sockopt.c') diff --git a/net/mptcp/sockopt.c b/net/mptcp/sockopt.c index 47aa826ba5..73fdf423de 100644 --- a/net/mptcp/sockopt.c +++ b/net/mptcp/sockopt.c @@ -181,6 +181,8 @@ static int mptcp_setsockopt_sol_socket_int(struct mptcp_sock *msk, int optname, switch (optname) { case SO_KEEPALIVE: + mptcp_sol_socket_sync_intval(msk, optname, val); + return 0; case SO_DEBUG: case SO_MARK: case SO_PRIORITY: @@ -622,31 +624,6 @@ static int mptcp_setsockopt_sol_tcp_congestion(struct mptcp_sock *msk, sockptr_t return ret; } -static int __mptcp_setsockopt_set_val(struct mptcp_sock *msk, int max, - int (*set_val)(struct sock *, int), - int *msk_val, int val) -{ - struct mptcp_subflow_context *subflow; - int err = 0; - - mptcp_for_each_subflow(msk, subflow) { - struct sock *ssk = mptcp_subflow_tcp_sock(subflow); - int ret; - - lock_sock(ssk); - ret = set_val(ssk, val); - err = err ? : ret; - release_sock(ssk); - } - - if (!err) { - *msk_val = val; - sockopt_seq_inc(msk); - } - - return err; -} - static int __mptcp_setsockopt_sol_tcp_cork(struct mptcp_sock *msk, int val) { struct mptcp_subflow_context *subflow; @@ -843,22 +820,6 @@ static int mptcp_setsockopt_sol_tcp(struct mptcp_sock *msk, int optname, case TCP_NODELAY: ret = __mptcp_setsockopt_sol_tcp_nodelay(msk, val); break; - case TCP_KEEPIDLE: - ret = __mptcp_setsockopt_set_val(msk, MAX_TCP_KEEPIDLE, - &tcp_sock_set_keepidle_locked, - &msk->keepalive_idle, val); - break; - case TCP_KEEPINTVL: - ret = __mptcp_setsockopt_set_val(msk, MAX_TCP_KEEPINTVL, - &tcp_sock_set_keepintvl, - &msk->keepalive_intvl, val); - break; - case TCP_KEEPCNT: - ret = __mptcp_setsockopt_set_val(msk, MAX_TCP_KEEPCNT, - &tcp_sock_set_keepcnt, - &msk->keepalive_cnt, - val); - break; default: ret = -ENOPROTOOPT; } @@ -972,7 +933,7 @@ void mptcp_diag_fill_info(struct mptcp_sock *msk, struct mptcp_info *info) mptcp_data_unlock(sk); slow = lock_sock_fast(sk); - info->mptcpi_csum_enabled = msk->csum_enabled; + info->mptcpi_csum_enabled = READ_ONCE(msk->csum_enabled); info->mptcpi_token = msk->token; info->mptcpi_write_seq = msk->write_seq; info->mptcpi_retransmits = inet_csk(sk)->icsk_retransmits; @@ -1361,8 +1322,6 @@ static int mptcp_put_int_option(struct mptcp_sock *msk, char __user *optval, static int mptcp_getsockopt_sol_tcp(struct mptcp_sock *msk, int optname, char __user *optval, int __user *optlen) { - struct sock *sk = (void *)msk; - switch (optname) { case TCP_ULP: case TCP_CONGESTION: @@ -1381,18 +1340,6 @@ static int mptcp_getsockopt_sol_tcp(struct mptcp_sock *msk, int optname, return mptcp_put_int_option(msk, optval, optlen, msk->cork); case TCP_NODELAY: return mptcp_put_int_option(msk, optval, optlen, msk->nodelay); - case TCP_KEEPIDLE: - return mptcp_put_int_option(msk, optval, optlen, - msk->keepalive_idle ? : - READ_ONCE(sock_net(sk)->ipv4.sysctl_tcp_keepalive_time) / HZ); - case TCP_KEEPINTVL: - return mptcp_put_int_option(msk, optval, optlen, - msk->keepalive_intvl ? : - READ_ONCE(sock_net(sk)->ipv4.sysctl_tcp_keepalive_intvl) / HZ); - case TCP_KEEPCNT: - return mptcp_put_int_option(msk, optval, optlen, - msk->keepalive_cnt ? : - READ_ONCE(sock_net(sk)->ipv4.sysctl_tcp_keepalive_probes)); case TCP_NOTSENT_LOWAT: return mptcp_put_int_option(msk, optval, optlen, msk->notsent_lowat); } @@ -1510,9 +1457,6 @@ static void sync_socket_options(struct mptcp_sock *msk, struct sock *ssk) tcp_set_congestion_control(ssk, msk->ca_name, false, true); __tcp_sock_set_cork(ssk, !!msk->cork); __tcp_sock_set_nodelay(ssk, !!msk->nodelay); - tcp_sock_set_keepidle_locked(ssk, msk->keepalive_idle); - tcp_sock_set_keepintvl(ssk, msk->keepalive_intvl); - tcp_sock_set_keepcnt(ssk, msk->keepalive_cnt); inet_assign_bit(TRANSPARENT, ssk, inet_test_bit(TRANSPARENT, sk)); inet_assign_bit(FREEBIND, ssk, inet_test_bit(FREEBIND, sk)); -- cgit v1.2.3