Commit 1e579caa authored by Nikolay Borisov's avatar Nikolay Borisov Committed by David S. Miller

ipv4: Namespaceify tcp_fin_timeout sysctl knob

Signed-off-by: default avatarNikolay Borisov <kernel@kyup.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent c402d9be
...@@ -105,6 +105,7 @@ struct netns_ipv4 { ...@@ -105,6 +105,7 @@ struct netns_ipv4 {
int sysctl_tcp_retries1; int sysctl_tcp_retries1;
int sysctl_tcp_retries2; int sysctl_tcp_retries2;
int sysctl_tcp_orphan_retries; int sysctl_tcp_orphan_retries;
int sysctl_tcp_fin_timeout;
struct ping_group_range ping_group_range; struct ping_group_range ping_group_range;
......
...@@ -239,7 +239,6 @@ extern struct inet_timewait_death_row tcp_death_row; ...@@ -239,7 +239,6 @@ extern struct inet_timewait_death_row tcp_death_row;
extern int sysctl_tcp_timestamps; extern int sysctl_tcp_timestamps;
extern int sysctl_tcp_window_scaling; extern int sysctl_tcp_window_scaling;
extern int sysctl_tcp_sack; extern int sysctl_tcp_sack;
extern int sysctl_tcp_fin_timeout;
extern int sysctl_tcp_fastopen; extern int sysctl_tcp_fastopen;
extern int sysctl_tcp_retrans_collapse; extern int sysctl_tcp_retrans_collapse;
extern int sysctl_tcp_stdurg; extern int sysctl_tcp_stdurg;
...@@ -1249,7 +1248,7 @@ static inline u32 keepalive_time_elapsed(const struct tcp_sock *tp) ...@@ -1249,7 +1248,7 @@ static inline u32 keepalive_time_elapsed(const struct tcp_sock *tp)
static inline int tcp_fin_time(const struct sock *sk) static inline int tcp_fin_time(const struct sock *sk)
{ {
int fin_timeout = tcp_sk(sk)->linger2 ? : sysctl_tcp_fin_timeout; int fin_timeout = tcp_sk(sk)->linger2 ? : sock_net(sk)->ipv4.sysctl_tcp_fin_timeout;
const int rto = inet_csk(sk)->icsk_rto; const int rto = inet_csk(sk)->icsk_rto;
if (fin_timeout < (rto << 2) - (rto >> 1)) if (fin_timeout < (rto << 2) - (rto >> 1))
......
...@@ -319,13 +319,6 @@ static struct ctl_table ipv4_table[] = { ...@@ -319,13 +319,6 @@ static struct ctl_table ipv4_table[] = {
.mode = 0644, .mode = 0644,
.proc_handler = proc_dointvec .proc_handler = proc_dointvec
}, },
{
.procname = "tcp_fin_timeout",
.data = &sysctl_tcp_fin_timeout,
.maxlen = sizeof(int),
.mode = 0644,
.proc_handler = proc_dointvec_jiffies,
},
{ {
.procname = "tcp_fastopen", .procname = "tcp_fastopen",
.data = &sysctl_tcp_fastopen, .data = &sysctl_tcp_fastopen,
...@@ -960,6 +953,13 @@ static struct ctl_table ipv4_net_table[] = { ...@@ -960,6 +953,13 @@ static struct ctl_table ipv4_net_table[] = {
.mode = 0644, .mode = 0644,
.proc_handler = proc_dointvec .proc_handler = proc_dointvec
}, },
{
.procname = "tcp_fin_timeout",
.data = &init_net.ipv4.sysctl_tcp_fin_timeout,
.maxlen = sizeof(int),
.mode = 0644,
.proc_handler = proc_dointvec_jiffies,
},
{ } { }
}; };
......
...@@ -282,8 +282,6 @@ ...@@ -282,8 +282,6 @@
#include <asm/unaligned.h> #include <asm/unaligned.h>
#include <net/busy_poll.h> #include <net/busy_poll.h>
int sysctl_tcp_fin_timeout __read_mostly = TCP_FIN_TIMEOUT;
int sysctl_tcp_min_tso_segs __read_mostly = 2; int sysctl_tcp_min_tso_segs __read_mostly = 2;
int sysctl_tcp_autocorking __read_mostly = 1; int sysctl_tcp_autocorking __read_mostly = 1;
...@@ -2330,6 +2328,7 @@ static int do_tcp_setsockopt(struct sock *sk, int level, ...@@ -2330,6 +2328,7 @@ static int do_tcp_setsockopt(struct sock *sk, int level,
{ {
struct tcp_sock *tp = tcp_sk(sk); struct tcp_sock *tp = tcp_sk(sk);
struct inet_connection_sock *icsk = inet_csk(sk); struct inet_connection_sock *icsk = inet_csk(sk);
struct net *net = sock_net(sk);
int val; int val;
int err = 0; int err = 0;
...@@ -2526,7 +2525,7 @@ static int do_tcp_setsockopt(struct sock *sk, int level, ...@@ -2526,7 +2525,7 @@ static int do_tcp_setsockopt(struct sock *sk, int level,
case TCP_LINGER2: case TCP_LINGER2:
if (val < 0) if (val < 0)
tp->linger2 = -1; tp->linger2 = -1;
else if (val > sysctl_tcp_fin_timeout / HZ) else if (val > net->ipv4.sysctl_tcp_fin_timeout / HZ)
tp->linger2 = 0; tp->linger2 = 0;
else else
tp->linger2 = val * HZ; tp->linger2 = val * HZ;
...@@ -2771,7 +2770,7 @@ static int do_tcp_getsockopt(struct sock *sk, int level, ...@@ -2771,7 +2770,7 @@ static int do_tcp_getsockopt(struct sock *sk, int level,
case TCP_LINGER2: case TCP_LINGER2:
val = tp->linger2; val = tp->linger2;
if (val >= 0) if (val >= 0)
val = (val ? : sysctl_tcp_fin_timeout) / HZ; val = (val ? : net->ipv4.sysctl_tcp_fin_timeout) / HZ;
break; break;
case TCP_DEFER_ACCEPT: case TCP_DEFER_ACCEPT:
val = retrans_to_secs(icsk->icsk_accept_queue.rskq_defer_accept, val = retrans_to_secs(icsk->icsk_accept_queue.rskq_defer_accept,
......
...@@ -2394,6 +2394,7 @@ static int __net_init tcp_sk_init(struct net *net) ...@@ -2394,6 +2394,7 @@ static int __net_init tcp_sk_init(struct net *net)
net->ipv4.sysctl_tcp_retries1 = TCP_RETR1; net->ipv4.sysctl_tcp_retries1 = TCP_RETR1;
net->ipv4.sysctl_tcp_retries2 = TCP_RETR2; net->ipv4.sysctl_tcp_retries2 = TCP_RETR2;
net->ipv4.sysctl_tcp_orphan_retries = 0; net->ipv4.sysctl_tcp_orphan_retries = 0;
net->ipv4.sysctl_tcp_fin_timeout = TCP_FIN_TIMEOUT;
return 0; return 0;
fail: fail:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment