summaryrefslogtreecommitdiffstats
path: root/net/ipv4/tcp.c
diff options
context:
space:
mode:
authorStefan Baranoff <sbaranoff@gmail.com>2018-07-15 17:36:37 +0200
committerDavid S. Miller <davem@davemloft.net>2018-07-16 23:06:44 +0200
commit31048d7aedf31bf0f69c54a662944632f29d82f2 (patch)
tree32de842218f56480c1a6090df6f05a2c47da601e /net/ipv4/tcp.c
parentnet/mlx4_en: Don't reuse RX page when XDP is set (diff)
downloadlinux-31048d7aedf31bf0f69c54a662944632f29d82f2.tar.xz
linux-31048d7aedf31bf0f69c54a662944632f29d82f2.zip
tcp: Fix broken repair socket window probe patch
Correct previous bad attempt at allowing sockets to come out of TCP repair without sending window probes. To avoid changing size of the repair variable in struct tcp_sock, this lets the decision for sending probes or not to be made when coming out of repair by introducing two ways to turn it off. v2: * Remove erroneous comment; defines now make behavior clear Fixes: 70b7ff130224 ("tcp: allow user to create repair socket without window probes") Signed-off-by: Stefan Baranoff <sbaranoff@gmail.com> Signed-off-by: Eric Dumazet <edumazet@google.com> Acked-by: Andrei Vagin <avagin@virtuozzo.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv4/tcp.c')
-rw-r--r--net/ipv4/tcp.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c
index 8e5e2ca9ab1b..ec2186e3087f 100644
--- a/net/ipv4/tcp.c
+++ b/net/ipv4/tcp.c
@@ -2823,16 +2823,17 @@ static int do_tcp_setsockopt(struct sock *sk, int level,
case TCP_REPAIR:
if (!tcp_can_repair_sock(sk))
err = -EPERM;
- /* 1 for normal repair, 2 for no window probes */
- else if (val == 1 || val == 2) {
- tp->repair = val;
+ else if (val == TCP_REPAIR_ON) {
+ tp->repair = 1;
sk->sk_reuse = SK_FORCE_REUSE;
tp->repair_queue = TCP_NO_QUEUE;
- } else if (val == 0) {
+ } else if (val == TCP_REPAIR_OFF) {
+ tp->repair = 0;
+ sk->sk_reuse = SK_NO_REUSE;
+ tcp_send_window_probe(sk);
+ } else if (val == TCP_REPAIR_OFF_NO_WP) {
tp->repair = 0;
sk->sk_reuse = SK_NO_REUSE;
- if (tp->repair == 1)
- tcp_send_window_probe(sk);
} else
err = -EINVAL;