summaryrefslogtreecommitdiffstats
path: root/net/ipv4/tcp_output.c
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2016-05-10 16:06:04 +0200
committerTakashi Iwai <tiwai@suse.de>2016-05-10 16:06:04 +0200
commit2e00fde5c6ed8535244332ebb55e881baa54ae46 (patch)
treef578e02ef1dc6e59630f09404bb2f58500876811 /net/ipv4/tcp_output.c
parent39f0ccde3624e7cf882faccf7f72a47b7a763bfb (diff)
parent3231e2053eaeee70bdfb216a78a30f11e88e2243 (diff)
downloadblackbird-op-linux-2e00fde5c6ed8535244332ebb55e881baa54ae46.tar.gz
blackbird-op-linux-2e00fde5c6ed8535244332ebb55e881baa54ae46.zip
Merge branch 'for-linus' into for-next
Diffstat (limited to 'net/ipv4/tcp_output.c')
-rw-r--r--net/ipv4/tcp_output.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c
index 7d2dc015cd19..441ae9da3a23 100644
--- a/net/ipv4/tcp_output.c
+++ b/net/ipv4/tcp_output.c
@@ -2441,6 +2441,20 @@ u32 __tcp_select_window(struct sock *sk)
return window;
}
+void tcp_skb_collapse_tstamp(struct sk_buff *skb,
+ const struct sk_buff *next_skb)
+{
+ const struct skb_shared_info *next_shinfo = skb_shinfo(next_skb);
+ u8 tsflags = next_shinfo->tx_flags & SKBTX_ANY_TSTAMP;
+
+ if (unlikely(tsflags)) {
+ struct skb_shared_info *shinfo = skb_shinfo(skb);
+
+ shinfo->tx_flags |= tsflags;
+ shinfo->tskey = next_shinfo->tskey;
+ }
+}
+
/* Collapses two adjacent SKB's during retransmission. */
static void tcp_collapse_retrans(struct sock *sk, struct sk_buff *skb)
{
@@ -2484,6 +2498,8 @@ static void tcp_collapse_retrans(struct sock *sk, struct sk_buff *skb)
tcp_adjust_pcount(sk, next_skb, tcp_skb_pcount(next_skb));
+ tcp_skb_collapse_tstamp(skb, next_skb);
+
sk_wmem_free_skb(sk, next_skb);
}
OpenPOWER on IntegriCloud