hc
2024-09-20 cf4ce59b3b70238352c7f1729f0f7223214828ad
kernel/net/ipv4/tcp_recovery.c
....@@ -2,20 +2,6 @@
22 #include <linux/tcp.h>
33 #include <net/tcp.h>
44
5
-void tcp_mark_skb_lost(struct sock *sk, struct sk_buff *skb)
6
-{
7
- struct tcp_sock *tp = tcp_sk(sk);
8
-
9
- tcp_skb_mark_lost_uncond_verify(tp, skb);
10
- if (TCP_SKB_CB(skb)->sacked & TCPCB_SACKED_RETRANS) {
11
- /* Account for retransmits that are lost again */
12
- TCP_SKB_CB(skb)->sacked &= ~TCPCB_SACKED_RETRANS;
13
- tp->retrans_out -= tcp_skb_pcount(skb);
14
- NET_ADD_STATS(sock_net(sk), LINUX_MIB_TCPLOSTRETRANSMIT,
15
- tcp_skb_pcount(skb));
16
- }
17
-}
18
-
195 static bool tcp_rack_sent_after(u64 t1, u64 t2, u32 seq1, u32 seq2)
206 {
217 return t1 > t2 || (t1 == t2 && after(seq1, seq2));
....@@ -33,7 +19,8 @@
3319 return 0;
3420
3521 if (tp->sacked_out >= tp->reordering &&
36
- !(sock_net(sk)->ipv4.sysctl_tcp_recovery & TCP_RACK_NO_DUPTHRESH))
22
+ !(READ_ONCE(sock_net(sk)->ipv4.sysctl_tcp_recovery) &
23
+ TCP_RACK_NO_DUPTHRESH))
3724 return 0;
3825 }
3926
....@@ -50,7 +37,7 @@
5037 s32 tcp_rack_skb_timeout(struct tcp_sock *tp, struct sk_buff *skb, u32 reo_wnd)
5138 {
5239 return tp->rack.rtt_us + reo_wnd -
53
- tcp_stamp_us_delta(tp->tcp_mstamp, skb->skb_mstamp);
40
+ tcp_stamp_us_delta(tp->tcp_mstamp, tcp_skb_timestamp_us(skb));
5441 }
5542
5643 /* RACK loss detection (IETF draft draft-ietf-tcpm-rack-01):
....@@ -91,7 +78,8 @@
9178 !(scb->sacked & TCPCB_SACKED_RETRANS))
9279 continue;
9380
94
- if (!tcp_rack_sent_after(tp->rack.mstamp, skb->skb_mstamp,
81
+ if (!tcp_rack_sent_after(tp->rack.mstamp,
82
+ tcp_skb_timestamp_us(skb),
9583 tp->rack.end_seq, scb->end_seq))
9684 break;
9785
....@@ -203,7 +191,8 @@
203191 {
204192 struct tcp_sock *tp = tcp_sk(sk);
205193
206
- if (sock_net(sk)->ipv4.sysctl_tcp_recovery & TCP_RACK_STATIC_REO_WND ||
194
+ if ((READ_ONCE(sock_net(sk)->ipv4.sysctl_tcp_recovery) &
195
+ TCP_RACK_STATIC_REO_WND) ||
207196 !rs->prior_delivered)
208197 return;
209198
....@@ -246,6 +235,6 @@
246235 tcp_fragment(sk, TCP_FRAG_IN_RTX_QUEUE, skb,
247236 mss, mss, GFP_ATOMIC);
248237
249
- tcp_skb_mark_lost_uncond_verify(tp, skb);
238
+ tcp_mark_skb_lost(sk, skb);
250239 }
251240 }