tcp: ensure prior synack rtx behavior with small backlogs
authorEric Dumazet <edumazet@google.com>
Tue, 6 Oct 2015 21:49:58 +0000 (14:49 -0700)
committerDavid S. Miller <davem@davemloft.net>
Wed, 7 Oct 2015 12:08:58 +0000 (05:08 -0700)
Some applications use a listen() backlog of 1.

Prior kernels were silently enforcing a qlen_log of 4, so that we were
sending up to /proc/sys/net/ipv4/tcp_synack_retries SYNACK messages.

Fixes: ef547f2ac16b ("tcp: remove max_qlen_log")
Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv4/inet_connection_sock.c

index 89eedfbd4ad53388fc22ddc6ba6720ce93bad9ab..514b9e910bd4ea245995346fe8188edd6f24b46f 100644 (file)
@@ -579,7 +579,7 @@ static void reqsk_timer_handler(unsigned long data)
         * ones are about to clog our table.
         */
        qlen = reqsk_queue_len(queue);
-       if ((qlen << 1) > sk_listener->sk_max_ack_backlog) {
+       if ((qlen << 1) > max(8U, sk_listener->sk_max_ack_backlog)) {
                int young = reqsk_queue_len_young(queue) << 1;
 
                while (thresh > 2) {