瀏覽代碼

tcp: set timestamps for restored skb-s

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>
Andrey Vagin 12 年之前
父節點
當前提交
7ed5c5ae96
共有 1 個文件被更改,包括 7 次插入0 次删除
  1. 7 0
      net/ipv4/tcp.c

+ 7 - 0
net/ipv4/tcp.c

@@ -1120,6 +1120,13 @@ new_segment:
 				if (!skb)
 				if (!skb)
 					goto wait_for_memory;
 					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.
 				 * Check whether we can use HW checksum.
 				 */
 				 */