|
@@ -1893,7 +1893,12 @@ int tcp_retransmit_skb(struct sock *sk, struct sk_buff *skb)
|
|
|
if (tcp_fragment(sk, skb, cur_mss, cur_mss))
|
|
|
return -ENOMEM; /* We'll try again later. */
|
|
|
} else {
|
|
|
- tcp_init_tso_segs(sk, skb, cur_mss);
|
|
|
+ int oldpcount = tcp_skb_pcount(skb);
|
|
|
+
|
|
|
+ if (unlikely(oldpcount > 1)) {
|
|
|
+ tcp_init_tso_segs(sk, skb, cur_mss);
|
|
|
+ tcp_adjust_pcount(sk, skb, oldpcount - tcp_skb_pcount(skb));
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
tcp_retrans_try_collapse(sk, skb, cur_mss);
|