From f18cc0c30a7e0800824ff59645c0f604b7f4c579 Mon Sep 17 00:00:00 2001 From: Alexey Kuznetsov Date: Tue, 19 Sep 2006 12:52:50 -0700 Subject: [PATCH] --- yaml --- r: 34683 b: refs/heads/master c: 1ef9696c909060ccdae3ade245ca88692b49285b h: refs/heads/master i: 34681: 29bc2157df8890210c84a4131a991e7be3ec489f 34679: 3aabe484b94a8dc096af4dd753530e16604aca73 v: v3 --- [refs] | 2 +- trunk/include/net/inet_connection_sock.h | 3 ++- trunk/net/ipv4/tcp.c | 7 +++++-- trunk/net/ipv4/tcp_input.c | 2 ++ 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/[refs] b/[refs] index b484a4c4d6ee..99ea1171e440 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 4eb327b517cf85f6cb7dcd5691e7b748cbe8c343 +refs/heads/master: 1ef9696c909060ccdae3ade245ca88692b49285b diff --git a/trunk/include/net/inet_connection_sock.h b/trunk/include/net/inet_connection_sock.h index 9bf73fe50948..de4e83b6da4b 100644 --- a/trunk/include/net/inet_connection_sock.h +++ b/trunk/include/net/inet_connection_sock.h @@ -147,7 +147,8 @@ extern struct sock *inet_csk_clone(struct sock *sk, enum inet_csk_ack_state_t { ICSK_ACK_SCHED = 1, ICSK_ACK_TIMER = 2, - ICSK_ACK_PUSHED = 4 + ICSK_ACK_PUSHED = 4, + ICSK_ACK_PUSHED2 = 8 }; extern void inet_csk_init_xmit_timers(struct sock *sk, diff --git a/trunk/net/ipv4/tcp.c b/trunk/net/ipv4/tcp.c index 29e3d606db78..66e9a729f6df 100644 --- a/trunk/net/ipv4/tcp.c +++ b/trunk/net/ipv4/tcp.c @@ -955,8 +955,11 @@ void tcp_cleanup_rbuf(struct sock *sk, int copied) * receive buffer and there was a small segment * in queue. */ - (copied > 0 && (icsk->icsk_ack.pending & ICSK_ACK_PUSHED) && - !icsk->icsk_ack.pingpong && !atomic_read(&sk->sk_rmem_alloc))) + (copied > 0 && + ((icsk->icsk_ack.pending & ICSK_ACK_PUSHED2) || + ((icsk->icsk_ack.pending & ICSK_ACK_PUSHED) && + !icsk->icsk_ack.pingpong)) && + !atomic_read(&sk->sk_rmem_alloc))) time_to_ack = 1; } diff --git a/trunk/net/ipv4/tcp_input.c b/trunk/net/ipv4/tcp_input.c index 511b738f118a..b3def0df14fb 100644 --- a/trunk/net/ipv4/tcp_input.c +++ b/trunk/net/ipv4/tcp_input.c @@ -156,6 +156,8 @@ static void tcp_measure_rcv_mss(struct sock *sk, return; } } + if (icsk->icsk_ack.pending & ICSK_ACK_PUSHED) + icsk->icsk_ack.pending |= ICSK_ACK_PUSHED2; icsk->icsk_ack.pending |= ICSK_ACK_PUSHED; } }