aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv4/tcp_output.c
diff options
context:
space:
mode:
authorEric Dumazet <edumazet@google.com>2018-12-10 09:10:02 -0500
committerDavid S. Miller <davem@davemloft.net>2018-12-10 15:09:15 -0500
commitd8ed257f313f64e9835e61d1365dea95a0a1c9c6 (patch)
treec708a76e9db18d073e67b05d8d9882d029111de7 /net/ipv4/tcp_output.c
parentc535293f6351c7047fdaebde4d8b0f665a98a481 (diff)
tcp: handle EOR and FIN conditions the same in tcp_tso_should_defer()
In commit f9bfe4e6a9d0 ("tcp: lack of available data can also cause TSO defer") we moved the test in tcp_tso_should_defer() for packets with a FIN flag, and we mentioned that the same would be done later for EOR flag. Both flags should be handled at the same time, after all other heuristics have been considered. They both mean that no more bytes can be added to this skb by an application. Signed-off-by: Eric Dumazet <edumazet@google.com> Acked-by: Soheil Hassas Yeganeh <soheil@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv4/tcp_output.c')
-rw-r--r--net/ipv4/tcp_output.c7
1 files changed, 2 insertions, 5 deletions
diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c
index c31badfee806..730bc44dbad9 100644
--- a/net/ipv4/tcp_output.c
+++ b/net/ipv4/tcp_output.c
@@ -1947,10 +1947,6 @@ static bool tcp_tso_should_defer(struct sock *sk, struct sk_buff *skb,
1947 if ((skb != tcp_write_queue_tail(sk)) && (limit >= skb->len)) 1947 if ((skb != tcp_write_queue_tail(sk)) && (limit >= skb->len))
1948 goto send_now; 1948 goto send_now;
1949 1949
1950 /* If this packet won't get more data, do not wait. */
1951 if (TCP_SKB_CB(skb)->eor)
1952 goto send_now;
1953
1954 win_divisor = READ_ONCE(sock_net(sk)->ipv4.sysctl_tcp_tso_win_divisor); 1950 win_divisor = READ_ONCE(sock_net(sk)->ipv4.sysctl_tcp_tso_win_divisor);
1955 if (win_divisor) { 1951 if (win_divisor) {
1956 u32 chunk = min(tp->snd_wnd, tp->snd_cwnd * tp->mss_cache); 1952 u32 chunk = min(tp->snd_wnd, tp->snd_cwnd * tp->mss_cache);
@@ -1999,7 +1995,8 @@ static bool tcp_tso_should_defer(struct sock *sk, struct sk_buff *skb,
1999 } 1995 }
2000 1996
2001 /* If this packet won't get more data, do not wait. */ 1997 /* If this packet won't get more data, do not wait. */
2002 if (TCP_SKB_CB(skb)->tcp_flags & TCPHDR_FIN) 1998 if ((TCP_SKB_CB(skb)->tcp_flags & TCPHDR_FIN) ||
1999 TCP_SKB_CB(skb)->eor)
2003 goto send_now; 2000 goto send_now;
2004 2001
2005 return true; 2002 return true;