Skip to content

Commit 6fd70a6

Browse files
Eric Dumazetdavem330
Eric Dumazet
authored andcommitted
tcp: set TCP_KEEPINTVL locklessly
tp->keepalive_intvl can be set locklessly, readers are already taking care of this field being potentially set by other threads. Signed-off-by: Eric Dumazet <[email protected]> Acked-by: Soheil Hassas Yeganeh <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent d58f2e1 commit 6fd70a6

File tree

1 file changed

+2
-8
lines changed

1 file changed

+2
-8
lines changed

net/ipv4/tcp.c

+2-8
Original file line numberDiff line numberDiff line change
@@ -3348,9 +3348,7 @@ int tcp_sock_set_keepintvl(struct sock *sk, int val)
33483348
if (val < 1 || val > MAX_TCP_KEEPINTVL)
33493349
return -EINVAL;
33503350

3351-
lock_sock(sk);
33523351
WRITE_ONCE(tcp_sk(sk)->keepalive_intvl, val * HZ);
3353-
release_sock(sk);
33543352
return 0;
33553353
}
33563354
EXPORT_SYMBOL(tcp_sock_set_keepintvl);
@@ -3471,6 +3469,8 @@ int do_tcp_setsockopt(struct sock *sk, int level, int optname,
34713469
return tcp_sock_set_syncnt(sk, val);
34723470
case TCP_USER_TIMEOUT:
34733471
return tcp_sock_set_user_timeout(sk, val);
3472+
case TCP_KEEPINTVL:
3473+
return tcp_sock_set_keepintvl(sk, val);
34743474
}
34753475

34763476
sockopt_lock_sock(sk);
@@ -3568,12 +3568,6 @@ int do_tcp_setsockopt(struct sock *sk, int level, int optname,
35683568
case TCP_KEEPIDLE:
35693569
err = tcp_sock_set_keepidle_locked(sk, val);
35703570
break;
3571-
case TCP_KEEPINTVL:
3572-
if (val < 1 || val > MAX_TCP_KEEPINTVL)
3573-
err = -EINVAL;
3574-
else
3575-
WRITE_ONCE(tp->keepalive_intvl, val * HZ);
3576-
break;
35773571
case TCP_KEEPCNT:
35783572
if (val < 1 || val > MAX_TCP_KEEPCNT)
35793573
err = -EINVAL;

0 commit comments

Comments
 (0)