Re: [PATCH v2 1/1] tcp: Honor the eor bit in tcp_mtu_probe

2018-02-06 Thread David Miller
From: Ilya Lesokhin 
Date: Mon,  5 Feb 2018 20:18:32 +0200

> 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 

This adds a build warning, please fix:

  CC  net/ipv4/tcp_output.o
In file included from ./include/linux/tcp.h:21:0,
 from ./include/net/tcp.h:24,
 from net/ipv4/tcp_output.c:39:
net/ipv4/tcp_output.c: In function ‘tcp_write_xmit’:
./include/linux/skbuff.h:3196:12: warning: ‘skb’ may be used uninitialized in 
this function [-Wmaybe-uninitialized]
   for (tmp = skb->next;  \
^
net/ipv4/tcp_output.c:2043:18: note: ‘skb’ was declared here
  struct sk_buff *skb, *nskb, *next;
  ^~~

This is with:

[davem@dhcp-10-15-49-227 net]$ gcc --version
gcc (GCC) 7.3.1 20180130 (Red Hat 7.3.1-2)
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

[davem@dhcp-10-15-49-227 net]$


Re: [PATCH v2 1/1] tcp: Honor the eor bit in tcp_mtu_probe

2018-02-05 Thread Eric Dumazet
On Mon, 2018-02-05 at 20:18 +0200, Ilya Lesokhin wrote:
> 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 
> ---
>  net/ipv4/tcp_output.c | 12 
>  1 file changed, 12 insertions(+)

Reviewed-by: Eric Dumazet 

Thanks Ilya



[PATCH v2 1/1] tcp: Honor the eor bit in tcp_mtu_probe

2018-02-05 Thread Ilya Lesokhin
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 
---
 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