diff options
| author | David S. Miller <davem@davemloft.net> | 2012-07-16 03:44:56 -0700 | 
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2012-07-16 03:44:56 -0700 | 
| commit | 35ad9b9cf7d8a2e6259a0d24022e910adb6f3489 (patch) | |
| tree | d9772467e072f3f1d142aa0ce2fc56ef69c57cb7 /net/ipv6/tcp_ipv6.c | |
| parent | 80d0a69fc57715dc9080c0567df1ed911b78abea (diff) | |
| download | olio-linux-3.10-35ad9b9cf7d8a2e6259a0d24022e910adb6f3489.tar.xz olio-linux-3.10-35ad9b9cf7d8a2e6259a0d24022e910adb6f3489.zip  | |
ipv6: Add helper inet6_csk_update_pmtu().
This is the ipv6 version of inet_csk_update_pmtu().
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv6/tcp_ipv6.c')
| -rw-r--r-- | net/ipv6/tcp_ipv6.c | 37 | 
1 files changed, 4 insertions, 33 deletions
diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c index 3071f377145..ecdf241cad0 100644 --- a/net/ipv6/tcp_ipv6.c +++ b/net/ipv6/tcp_ipv6.c @@ -378,43 +378,14 @@ static void tcp_v6_err(struct sk_buff *skb, struct inet6_skb_parm *opt,  		if ((1 << sk->sk_state) & (TCPF_LISTEN | TCPF_CLOSE))  			goto out; -		/* icmp should have updated the destination cache entry */ -		dst = __sk_dst_check(sk, np->dst_cookie); - -		if (dst == NULL) { -			struct inet_sock *inet = inet_sk(sk); -			struct flowi6 fl6; - -			/* BUGGG_FUTURE: Again, it is not clear how -			   to handle rthdr case. Ignore this complexity -			   for now. -			 */ -			memset(&fl6, 0, sizeof(fl6)); -			fl6.flowi6_proto = IPPROTO_TCP; -			fl6.daddr = np->daddr; -			fl6.saddr = np->saddr; -			fl6.flowi6_oif = sk->sk_bound_dev_if; -			fl6.flowi6_mark = sk->sk_mark; -			fl6.fl6_dport = inet->inet_dport; -			fl6.fl6_sport = inet->inet_sport; -			security_skb_classify_flow(skb, flowi6_to_flowi(&fl6)); - -			dst = ip6_dst_lookup_flow(sk, &fl6, NULL, false); -			if (IS_ERR(dst)) { -				sk->sk_err_soft = -PTR_ERR(dst); -				goto out; -			} - -		} else -			dst_hold(dst); - -		dst->ops->update_pmtu(dst, ntohl(info)); +		dst = inet6_csk_update_pmtu(sk, ntohl(info)); +		if (!dst) +			goto out;  		if (inet_csk(sk)->icsk_pmtu_cookie > dst_mtu(dst)) {  			tcp_sync_mss(sk, dst_mtu(dst));  			tcp_simple_retransmit(sk); -		} /* else let the usual retransmit timer handle it */ -		dst_release(dst); +		}  		goto out;  	}  |