summaryrefslogtreecommitdiffstats
path: root/net/mptcp/sockopt.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/mptcp/sockopt.c')
-rw-r--r--net/mptcp/sockopt.c62
1 files changed, 3 insertions, 59 deletions
diff --git a/net/mptcp/sockopt.c b/net/mptcp/sockopt.c
index 47aa826ba..73fdf423d 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));