@@ -1169,10 +1169,11 @@ static void tcp_mark_lost_retrans(struct sock *sk)
1169
1169
tp -> lost_retrans_low = new_low_seq ;
1170
1170
}
1171
1171
1172
- static int tcp_check_dsack (struct tcp_sock * tp , struct sk_buff * ack_skb ,
1172
+ static int tcp_check_dsack (struct sock * sk , struct sk_buff * ack_skb ,
1173
1173
struct tcp_sack_block_wire * sp , int num_sacks ,
1174
1174
u32 prior_snd_una )
1175
1175
{
1176
+ struct tcp_sock * tp = tcp_sk (sk );
1176
1177
u32 start_seq_0 = get_unaligned_be32 (& sp [0 ].start_seq );
1177
1178
u32 end_seq_0 = get_unaligned_be32 (& sp [0 ].end_seq );
1178
1179
int dup_sack = 0 ;
@@ -1434,7 +1435,7 @@ tcp_sacktag_write_queue(struct sock *sk, struct sk_buff *ack_skb,
1434
1435
tcp_highest_sack_reset (sk );
1435
1436
}
1436
1437
1437
- found_dup_sack = tcp_check_dsack (tp , ack_skb , sp_wire ,
1438
+ found_dup_sack = tcp_check_dsack (sk , ack_skb , sp_wire ,
1438
1439
num_sacks , prior_snd_una );
1439
1440
if (found_dup_sack )
1440
1441
flag |= FLAG_DSACKING_ACK ;
@@ -3711,8 +3712,10 @@ static inline int tcp_sack_extend(struct tcp_sack_block *sp, u32 seq,
3711
3712
return 0 ;
3712
3713
}
3713
3714
3714
- static void tcp_dsack_set (struct tcp_sock * tp , u32 seq , u32 end_seq )
3715
+ static void tcp_dsack_set (struct sock * sk , u32 seq , u32 end_seq )
3715
3716
{
3717
+ struct tcp_sock * tp = tcp_sk (sk );
3718
+
3716
3719
if (tcp_is_sack (tp ) && sysctl_tcp_dsack ) {
3717
3720
int mib_idx ;
3718
3721
@@ -3731,10 +3734,12 @@ static void tcp_dsack_set(struct tcp_sock *tp, u32 seq, u32 end_seq)
3731
3734
}
3732
3735
}
3733
3736
3734
- static void tcp_dsack_extend (struct tcp_sock * tp , u32 seq , u32 end_seq )
3737
+ static void tcp_dsack_extend (struct sock * sk , u32 seq , u32 end_seq )
3735
3738
{
3739
+ struct tcp_sock * tp = tcp_sk (sk );
3740
+
3736
3741
if (!tp -> rx_opt .dsack )
3737
- tcp_dsack_set (tp , seq , end_seq );
3742
+ tcp_dsack_set (sk , seq , end_seq );
3738
3743
else
3739
3744
tcp_sack_extend (tp -> duplicate_sack , seq , end_seq );
3740
3745
}
@@ -3753,7 +3758,7 @@ static void tcp_send_dupack(struct sock *sk, struct sk_buff *skb)
3753
3758
3754
3759
if (after (TCP_SKB_CB (skb )-> end_seq , tp -> rcv_nxt ))
3755
3760
end_seq = tp -> rcv_nxt ;
3756
- tcp_dsack_set (tp , TCP_SKB_CB (skb )-> seq , end_seq );
3761
+ tcp_dsack_set (sk , TCP_SKB_CB (skb )-> seq , end_seq );
3757
3762
}
3758
3763
}
3759
3764
@@ -3906,7 +3911,7 @@ static void tcp_ofo_queue(struct sock *sk)
3906
3911
__u32 dsack = dsack_high ;
3907
3912
if (before (TCP_SKB_CB (skb )-> end_seq , dsack_high ))
3908
3913
dsack_high = TCP_SKB_CB (skb )-> end_seq ;
3909
- tcp_dsack_extend (tp , TCP_SKB_CB (skb )-> seq , dsack );
3914
+ tcp_dsack_extend (sk , TCP_SKB_CB (skb )-> seq , dsack );
3910
3915
}
3911
3916
3912
3917
if (!after (TCP_SKB_CB (skb )-> end_seq , tp -> rcv_nxt )) {
@@ -4035,7 +4040,7 @@ static void tcp_data_queue(struct sock *sk, struct sk_buff *skb)
4035
4040
if (!after (TCP_SKB_CB (skb )-> end_seq , tp -> rcv_nxt )) {
4036
4041
/* A retransmit, 2nd most common case. Force an immediate ack. */
4037
4042
NET_INC_STATS_BH (LINUX_MIB_DELAYEDACKLOST );
4038
- tcp_dsack_set (tp , TCP_SKB_CB (skb )-> seq , TCP_SKB_CB (skb )-> end_seq );
4043
+ tcp_dsack_set (sk , TCP_SKB_CB (skb )-> seq , TCP_SKB_CB (skb )-> end_seq );
4039
4044
4040
4045
out_of_window :
4041
4046
tcp_enter_quickack_mode (sk );
@@ -4057,7 +4062,7 @@ static void tcp_data_queue(struct sock *sk, struct sk_buff *skb)
4057
4062
tp -> rcv_nxt , TCP_SKB_CB (skb )-> seq ,
4058
4063
TCP_SKB_CB (skb )-> end_seq );
4059
4064
4060
- tcp_dsack_set (tp , TCP_SKB_CB (skb )-> seq , tp -> rcv_nxt );
4065
+ tcp_dsack_set (sk , TCP_SKB_CB (skb )-> seq , tp -> rcv_nxt );
4061
4066
4062
4067
/* If window is closed, drop tail of packet. But after
4063
4068
* remembering D-SACK for its head made in previous line.
@@ -4122,12 +4127,12 @@ static void tcp_data_queue(struct sock *sk, struct sk_buff *skb)
4122
4127
if (!after (end_seq , TCP_SKB_CB (skb1 )-> end_seq )) {
4123
4128
/* All the bits are present. Drop. */
4124
4129
__kfree_skb (skb );
4125
- tcp_dsack_set (tp , seq , end_seq );
4130
+ tcp_dsack_set (sk , seq , end_seq );
4126
4131
goto add_sack ;
4127
4132
}
4128
4133
if (after (seq , TCP_SKB_CB (skb1 )-> seq )) {
4129
4134
/* Partial overlap. */
4130
- tcp_dsack_set (tp , seq ,
4135
+ tcp_dsack_set (sk , seq ,
4131
4136
TCP_SKB_CB (skb1 )-> end_seq );
4132
4137
} else {
4133
4138
skb1 = skb1 -> prev ;
@@ -4140,12 +4145,12 @@ static void tcp_data_queue(struct sock *sk, struct sk_buff *skb)
4140
4145
(struct sk_buff * )& tp -> out_of_order_queue &&
4141
4146
after (end_seq , TCP_SKB_CB (skb1 )-> seq )) {
4142
4147
if (before (end_seq , TCP_SKB_CB (skb1 )-> end_seq )) {
4143
- tcp_dsack_extend (tp , TCP_SKB_CB (skb1 )-> seq ,
4148
+ tcp_dsack_extend (sk , TCP_SKB_CB (skb1 )-> seq ,
4144
4149
end_seq );
4145
4150
break ;
4146
4151
}
4147
4152
__skb_unlink (skb1 , & tp -> out_of_order_queue );
4148
- tcp_dsack_extend (tp , TCP_SKB_CB (skb1 )-> seq ,
4153
+ tcp_dsack_extend (sk , TCP_SKB_CB (skb1 )-> seq ,
4149
4154
TCP_SKB_CB (skb1 )-> end_seq );
4150
4155
__kfree_skb (skb1 );
4151
4156
}
0 commit comments