|
@@ -2321,18 +2321,19 @@ static bool tcp_write_xmit(struct sock *sk, unsigned int mss_now, int nonagle,
|
|
while ((skb = tcp_send_head(sk))) {
|
|
while ((skb = tcp_send_head(sk))) {
|
|
unsigned int limit;
|
|
unsigned int limit;
|
|
|
|
|
|
|
|
+ if (unlikely(tp->repair) && tp->repair_queue == TCP_SEND_QUEUE) {
|
|
|
|
+ /* "skb_mstamp_ns" is used as a start point for the retransmit timer */
|
|
|
|
+ skb->skb_mstamp_ns = tp->tcp_wstamp_ns = tp->tcp_clock_cache;
|
|
|
|
+ list_move_tail(&skb->tcp_tsorted_anchor, &tp->tsorted_sent_queue);
|
|
|
|
+ goto repair; /* Skip network transmission */
|
|
|
|
+ }
|
|
|
|
+
|
|
if (tcp_pacing_check(sk))
|
|
if (tcp_pacing_check(sk))
|
|
break;
|
|
break;
|
|
|
|
|
|
tso_segs = tcp_init_tso_segs(skb, mss_now);
|
|
tso_segs = tcp_init_tso_segs(skb, mss_now);
|
|
BUG_ON(!tso_segs);
|
|
BUG_ON(!tso_segs);
|
|
|
|
|
|
- if (unlikely(tp->repair) && tp->repair_queue == TCP_SEND_QUEUE) {
|
|
|
|
- /* "skb_mstamp" is used as a start point for the retransmit timer */
|
|
|
|
- tcp_update_skb_after_send(sk, skb, tp->tcp_wstamp_ns);
|
|
|
|
- goto repair; /* Skip network transmission */
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
cwnd_quota = tcp_cwnd_test(tp, skb);
|
|
cwnd_quota = tcp_cwnd_test(tp, skb);
|
|
if (!cwnd_quota) {
|
|
if (!cwnd_quota) {
|
|
if (push_one == 2)
|
|
if (push_one == 2)
|