On Fri, 2017-09-15 at 14:37 -0700, David Miller wrote: > From: Eric Dumazet <eric.duma...@gmail.com> > Date: Wed, 13 Sep 2017 20:30:39 -0700 > > > From: Eric Dumazet <eduma...@googl.com> > > > > liujian reported a problem in TCP_USER_TIMEOUT processing with a patch > > in tcp_probe_timer() : > > https://www.spinics.net/lists/netdev/msg454496.html > > > > After investigations, the root cause of the problem is that we update > > skb->skb_mstamp of skbs in write queue, even if the attempt to send a > > clone or copy of it failed. One reason being a routing problem. > > > > This patch prevents this, solving liujian issue. > > > > It also removes a potential RTT miscalculation, since > > __tcp_retransmit_skb() is not OR-ing TCP_SKB_CB(skb)->sacked with > > TCPCB_EVER_RETRANS if a failure happens, but skb->skb_mstamp has > > been changed. > > > > A future ACK would then lead to a very small RTT sample and min_rtt > > would then be lowered to this too small value. > > > > Tested: > ... > > Signed-off-by: Eric Dumazet <eduma...@googl.com> > > Reported-by: liujian <liujia...@huawei.com> > > Applied and queued up for -stable, thanks.
Thanks David. It seems I forgot to move the call to tcp_rate_skb_sent(sk, skb), as this function depended on skb->skb_mstamp being up to date. I will send a fix, sorry for not catching this earlier.