浏览代码

[TCP] mtu probing: move tcp-specific data out of inet_connection_sock

This moves some TCP-specific MTU probing state out of
inet_connection_sock back to tcp_sock.

Signed-off-by: John Heffner <jheffner@psc.edu>
Signed-off-by: David S. Miller <davem@davemloft.net>
John Heffner 19 年之前
父节点
当前提交
0e7b13685f
共有 4 个文件被更改,包括 10 次插入6 次删除
  1. 6 0
      include/linux/tcp.h
  2. 0 2
      include/net/inet_connection_sock.h
  3. 2 2
      net/ipv4/tcp_input.c
  4. 2 2
      net/ipv4/tcp_output.c

+ 6 - 0
include/linux/tcp.h

@@ -343,6 +343,12 @@ struct tcp_sock {
 		__u32	seq;
 		__u32	time;
 	} rcvq_space;
+
+/* TCP-specific MTU probe information. */
+	struct {
+		__u32		  probe_seq_start;
+		__u32		  probe_seq_end;
+	} mtu_probe;
 };
 
 static inline struct tcp_sock *tcp_sk(const struct sock *sk)

+ 0 - 2
include/net/inet_connection_sock.h

@@ -114,8 +114,6 @@ struct inet_connection_sock {
 
 		/* Information on the current probe. */
 		int		  probe_size;
-		__u32		  probe_seq_start;
-		__u32		  probe_seq_end;
 	} icsk_mtup;
 	u32			  icsk_ca_priv[16];
 #define ICSK_CA_PRIV_SIZE	(16 * sizeof(u32))

+ 2 - 2
net/ipv4/tcp_input.c

@@ -2054,7 +2054,7 @@ tcp_fastretrans_alert(struct sock *sk, u32 prior_snd_una,
 		/* MTU probe failure: don't reduce cwnd */
 		if (icsk->icsk_ca_state < TCP_CA_CWR &&
 		    icsk->icsk_mtup.probe_size &&
-		    tp->snd_una == icsk->icsk_mtup.probe_seq_start) {
+		    tp->snd_una == tp->mtu_probe.probe_seq_start) {
 			tcp_mtup_probe_failed(sk);
 			/* Restores the reduction we did in tcp_mtup_probe() */
 			tp->snd_cwnd++;
@@ -2284,7 +2284,7 @@ static int tcp_clean_rtx_queue(struct sock *sk, __s32 *seq_rtt_p)
 
 		/* MTU probing checks */
 		if (icsk->icsk_mtup.probe_size) {
-			if (!after(icsk->icsk_mtup.probe_seq_end, TCP_SKB_CB(skb)->end_seq)) {
+			if (!after(tp->mtu_probe.probe_seq_end, TCP_SKB_CB(skb)->end_seq)) {
 				tcp_mtup_probe_success(sk, skb);
 			}
 		}

+ 2 - 2
net/ipv4/tcp_output.c

@@ -1238,8 +1238,8 @@ static int tcp_mtu_probe(struct sock *sk)
 		update_send_head(sk, tp, nskb);
 
 		icsk->icsk_mtup.probe_size = tcp_mss_to_mtu(sk, nskb->len);
-		icsk->icsk_mtup.probe_seq_start = TCP_SKB_CB(nskb)->seq;
-		icsk->icsk_mtup.probe_seq_end = TCP_SKB_CB(nskb)->end_seq;
+		tp->mtu_probe.probe_seq_start = TCP_SKB_CB(nskb)->seq;
+		tp->mtu_probe.probe_seq_end = TCP_SKB_CB(nskb)->end_seq;
 
 		return 1;
 	}