summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrey Vagin <avagin@openvz.org>2013-08-16 19:04:36 +0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2013-09-14 06:54:55 -0700
commitf3f905389f1aaae9e091a28d018c66e08c85eddd (patch)
tree6c32397fd5c7b1c99bdb256cd65c2ca60db7754f
parenta829a28873ec2f5daedd77ef91e430b260af1521 (diff)
downloadlinux-3.10-f3f905389f1aaae9e091a28d018c66e08c85eddd.tar.gz
linux-3.10-f3f905389f1aaae9e091a28d018c66e08c85eddd.tar.bz2
linux-3.10-f3f905389f1aaae9e091a28d018c66e08c85eddd.zip
tcp: set timestamps for restored skb-s
[ Upstream commit 7ed5c5ae96d23da22de95e1c7a239537acd378b1 ] When the repair mode is turned off, the write queue seqs are updated so that the whole queue is considered to be 'already sent. The "when" field must be set for such skb. It's used in tcp_rearm_rto for example. If the "when" field isn't set, the retransmit timeout can be calculated incorrectly and a tcp connected can stop for two minutes (TCP_RTO_MAX). Acked-by: Pavel Emelyanov <xemul@parallels.com> Cc: "David S. Miller" <davem@davemloft.net> Cc: Alexey Kuznetsov <kuznet@ms2.inr.ac.ru> Cc: James Morris <jmorris@namei.org> Cc: Hideaki YOSHIFUJI <yoshfuji@linux-ipv6.org> Cc: Patrick McHardy <kaber@trash.net> Signed-off-by: Andrey Vagin <avagin@openvz.org> Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--net/ipv4/tcp.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c
index ab450c099aa..2005561861a 100644
--- a/net/ipv4/tcp.c
+++ b/net/ipv4/tcp.c
@@ -1118,6 +1118,13 @@ new_segment:
goto wait_for_memory;
/*
+ * All packets are restored as if they have
+ * already been sent.
+ */
+ if (tp->repair)
+ TCP_SKB_CB(skb)->when = tcp_time_stamp;
+
+ /*
* Check whether we can use HW checksum.
*/
if (sk->sk_route_caps & NETIF_F_ALL_CSUM)