diff options
Diffstat (limited to 'net/ipv6/ip6_output.c')
-rw-r--r-- | net/ipv6/ip6_output.c | 11 |
1 files changed, 3 insertions, 8 deletions
diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c index cbf127ae7c67..635b8d340cdb 100644 --- a/net/ipv6/ip6_output.c +++ b/net/ipv6/ip6_output.c | |||
@@ -1071,17 +1071,12 @@ struct dst_entry *ip6_sk_dst_lookup_flow(struct sock *sk, struct flowi6 *fl6, | |||
1071 | const struct in6_addr *final_dst) | 1071 | const struct in6_addr *final_dst) |
1072 | { | 1072 | { |
1073 | struct dst_entry *dst = sk_dst_check(sk, inet6_sk(sk)->dst_cookie); | 1073 | struct dst_entry *dst = sk_dst_check(sk, inet6_sk(sk)->dst_cookie); |
1074 | int err; | ||
1075 | 1074 | ||
1076 | dst = ip6_sk_dst_check(sk, dst, fl6); | 1075 | dst = ip6_sk_dst_check(sk, dst, fl6); |
1076 | if (!dst) | ||
1077 | dst = ip6_dst_lookup_flow(sk, fl6, final_dst); | ||
1077 | 1078 | ||
1078 | err = ip6_dst_lookup_tail(sock_net(sk), sk, &dst, fl6); | 1079 | return dst; |
1079 | if (err) | ||
1080 | return ERR_PTR(err); | ||
1081 | if (final_dst) | ||
1082 | fl6->daddr = *final_dst; | ||
1083 | |||
1084 | return xfrm_lookup_route(sock_net(sk), dst, flowi6_to_flowi(fl6), sk, 0); | ||
1085 | } | 1080 | } |
1086 | EXPORT_SYMBOL_GPL(ip6_sk_dst_lookup_flow); | 1081 | EXPORT_SYMBOL_GPL(ip6_sk_dst_lookup_flow); |
1087 | 1082 | ||