aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv4/tcp_input.c
diff options
context:
space:
mode:
authorEric Dumazet <edumazet@google.com>2018-04-16 13:33:36 -0400
committerDavid S. Miller <davem@davemloft.net>2018-04-16 18:26:37 -0400
commit796f82eafcd96629c2f9a0332dbb4f474854aaf8 (patch)
treed758c4141548f9a997602c3beb25e1ca26bad54e /net/ipv4/tcp_input.c
parentd1361840f8c519eaee9a78ffe09e4f0a1b586846 (diff)
tcp: fix delayed acks behavior for SO_RCVLOWAT
We should not delay acks if there are not enough bytes in receive queue to satisfy SO_RCVLOWAT. Since [E]POLLIN event is not going to be generated, there is little hope for a delayed ack to be useful. In fact, delaying ACK prevents sender from completing the transfer. Signed-off-by: Eric Dumazet <edumazet@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv4/tcp_input.c')
-rw-r--r--net/ipv4/tcp_input.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
index 367def6ddeda..d854363a4387 100644
--- a/net/ipv4/tcp_input.c
+++ b/net/ipv4/tcp_input.c
@@ -5026,9 +5026,12 @@ static void __tcp_ack_snd_check(struct sock *sk, int ofo_possible)
5026 /* More than one full frame received... */ 5026 /* More than one full frame received... */
5027 if (((tp->rcv_nxt - tp->rcv_wup) > inet_csk(sk)->icsk_ack.rcv_mss && 5027 if (((tp->rcv_nxt - tp->rcv_wup) > inet_csk(sk)->icsk_ack.rcv_mss &&
5028 /* ... and right edge of window advances far enough. 5028 /* ... and right edge of window advances far enough.
5029 * (tcp_recvmsg() will send ACK otherwise). Or... 5029 * (tcp_recvmsg() will send ACK otherwise).
5030 * If application uses SO_RCVLOWAT, we want send ack now if
5031 * we have not received enough bytes to satisfy the condition.
5030 */ 5032 */
5031 __tcp_select_window(sk) >= tp->rcv_wnd) || 5033 (tp->rcv_nxt - tp->copied_seq < sk->sk_rcvlowat ||
5034 __tcp_select_window(sk) >= tp->rcv_wnd)) ||
5032 /* We ACK each frame or... */ 5035 /* We ACK each frame or... */
5033 tcp_in_quickack_mode(sk) || 5036 tcp_in_quickack_mode(sk) ||
5034 /* We have out of order data. */ 5037 /* We have out of order data. */