diff options
Diffstat (limited to 'net/ipv4/tcp.c')
-rw-r--r-- | net/ipv4/tcp.c | 18 |
1 files changed, 7 insertions, 11 deletions
diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c index 39b629ac2404..58ac838bf460 100644 --- a/net/ipv4/tcp.c +++ b/net/ipv4/tcp.c | |||
@@ -2105,15 +2105,12 @@ static int do_tcp_setsockopt(struct sock *sk, int level, | |||
2105 | break; | 2105 | break; |
2106 | 2106 | ||
2107 | case TCP_DEFER_ACCEPT: | 2107 | case TCP_DEFER_ACCEPT: |
2108 | icsk->icsk_accept_queue.rskq_defer_accept = 0; | 2108 | if (val < 0) { |
2109 | if (val > 0) { | 2109 | err = -EINVAL; |
2110 | /* Translate value in seconds to number of | 2110 | } else { |
2111 | * retransmits */ | 2111 | if (val > MAX_TCP_ACCEPT_DEFERRED) |
2112 | while (icsk->icsk_accept_queue.rskq_defer_accept < 32 && | 2112 | val = MAX_TCP_ACCEPT_DEFERRED; |
2113 | val > ((TCP_TIMEOUT_INIT / HZ) << | 2113 | icsk->icsk_accept_queue.rskq_defer_accept = val; |
2114 | icsk->icsk_accept_queue.rskq_defer_accept)) | ||
2115 | icsk->icsk_accept_queue.rskq_defer_accept++; | ||
2116 | icsk->icsk_accept_queue.rskq_defer_accept++; | ||
2117 | } | 2114 | } |
2118 | break; | 2115 | break; |
2119 | 2116 | ||
@@ -2295,8 +2292,7 @@ static int do_tcp_getsockopt(struct sock *sk, int level, | |||
2295 | val = (val ? : sysctl_tcp_fin_timeout) / HZ; | 2292 | val = (val ? : sysctl_tcp_fin_timeout) / HZ; |
2296 | break; | 2293 | break; |
2297 | case TCP_DEFER_ACCEPT: | 2294 | case TCP_DEFER_ACCEPT: |
2298 | val = !icsk->icsk_accept_queue.rskq_defer_accept ? 0 : | 2295 | val = icsk->icsk_accept_queue.rskq_defer_accept; |
2299 | ((TCP_TIMEOUT_INIT / HZ) << (icsk->icsk_accept_queue.rskq_defer_accept - 1)); | ||
2300 | break; | 2296 | break; |
2301 | case TCP_WINDOW_CLAMP: | 2297 | case TCP_WINDOW_CLAMP: |
2302 | val = tp->window_clamp; | 2298 | val = tp->window_clamp; |