aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv4/tcp_output.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/ipv4/tcp_output.c')
-rw-r--r--net/ipv4/tcp_output.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c
index 97041f24cd27..2d390669d406 100644
--- a/net/ipv4/tcp_output.c
+++ b/net/ipv4/tcp_output.c
@@ -119,9 +119,13 @@ static __u16 tcp_advertise_mss(struct sock *sk)
119 struct dst_entry *dst = __sk_dst_get(sk); 119 struct dst_entry *dst = __sk_dst_get(sk);
120 int mss = tp->advmss; 120 int mss = tp->advmss;
121 121
122 if (dst && dst_metric(dst, RTAX_ADVMSS) < mss) { 122 if (dst) {
123 mss = dst_metric(dst, RTAX_ADVMSS); 123 unsigned int metric = dst_metric_advmss(dst);
124 tp->advmss = mss; 124
125 if (metric < mss) {
126 mss = metric;
127 tp->advmss = mss;
128 }
125 } 129 }
126 130
127 return (__u16)mss; 131 return (__u16)mss;
@@ -2422,7 +2426,7 @@ struct sk_buff *tcp_make_synack(struct sock *sk, struct dst_entry *dst,
2422 2426
2423 skb_dst_set(skb, dst_clone(dst)); 2427 skb_dst_set(skb, dst_clone(dst));
2424 2428
2425 mss = dst_metric(dst, RTAX_ADVMSS); 2429 mss = dst_metric_advmss(dst);
2426 if (tp->rx_opt.user_mss && tp->rx_opt.user_mss < mss) 2430 if (tp->rx_opt.user_mss && tp->rx_opt.user_mss < mss)
2427 mss = tp->rx_opt.user_mss; 2431 mss = tp->rx_opt.user_mss;
2428 2432
@@ -2556,7 +2560,7 @@ static void tcp_connect_init(struct sock *sk)
2556 2560
2557 if (!tp->window_clamp) 2561 if (!tp->window_clamp)
2558 tp->window_clamp = dst_metric(dst, RTAX_WINDOW); 2562 tp->window_clamp = dst_metric(dst, RTAX_WINDOW);
2559 tp->advmss = dst_metric(dst, RTAX_ADVMSS); 2563 tp->advmss = dst_metric_advmss(dst);
2560 if (tp->rx_opt.user_mss && tp->rx_opt.user_mss < tp->advmss) 2564 if (tp->rx_opt.user_mss && tp->rx_opt.user_mss < tp->advmss)
2561 tp->advmss = tp->rx_opt.user_mss; 2565 tp->advmss = tp->rx_opt.user_mss;
2562 2566