[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <20180205181832.95136-1-ilyal@mellanox.com>
Date: Mon, 5 Feb 2018 20:18:32 +0200
From: Ilya Lesokhin <ilyal@...lanox.com>
To: netdev@...r.kernel.org, eric.dumazet@...il.com, kafai@...com
Cc: borisp@...lanox.com, Ilya Lesokhin <ilyal@...lanox.com>
Subject: [PATCH v2 1/1] tcp: Honor the eor bit in tcp_mtu_probe
Avoid SKB coalescing if eor bit is set in one of the relevant
SKBs.
Fixes: c134ecb87817 ("tcp: Make use of MSG_EOR in tcp_sendmsg")
Signed-off-by: Ilya Lesokhin <ilyal@...lanox.com>
---
net/ipv4/tcp_output.c | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c
index e9f985e42405..70c5bb4958c3 100644
--- a/net/ipv4/tcp_output.c
+++ b/net/ipv4/tcp_output.c
@@ -2099,6 +2099,17 @@ static int tcp_mtu_probe(struct sock *sk)
return 0;
}
+ len = probe_size;
+ tcp_for_write_queue_from_safe(skb, next, sk) {
+ if (len <= skb->len)
+ break;
+
+ if (unlikely(TCP_SKB_CB(skb)->eor))
+ return -1;
+
+ len -= skb->len;
+ }
+
/* We're allowed to probe. Build it now. */
nskb = sk_stream_alloc_skb(sk, probe_size, GFP_ATOMIC, false);
if (!nskb)
@@ -2134,6 +2145,7 @@ static int tcp_mtu_probe(struct sock *sk)
/* We've eaten all the data from this skb.
* Throw it away. */
TCP_SKB_CB(nskb)->tcp_flags |= TCP_SKB_CB(skb)->tcp_flags;
+ TCP_SKB_CB(nskb)->eor = TCP_SKB_CB(skb)->eor;
tcp_unlink_write_queue(skb, sk);
sk_wmem_free_skb(sk, skb);
} else {
--
2.15.0.317.g14c63a9
Powered by blists - more mailing lists