|
|
@@ -1080,10 +1080,13 @@ static void ip6_link_failure(struct sk_buff *skb)
|
|
|
|
|
|
rt = (struct rt6_info *) skb_dst(skb);
|
|
|
if (rt) {
|
|
|
- if (rt->rt6i_flags & RTF_CACHE)
|
|
|
- rt6_update_expires(rt, 0);
|
|
|
- else if (rt->rt6i_node && (rt->rt6i_flags & RTF_DEFAULT))
|
|
|
+ if (rt->rt6i_flags & RTF_CACHE) {
|
|
|
+ dst_hold(&rt->dst);
|
|
|
+ if (ip6_del_rt(rt))
|
|
|
+ dst_free(&rt->dst);
|
|
|
+ } else if (rt->rt6i_node && (rt->rt6i_flags & RTF_DEFAULT)) {
|
|
|
rt->rt6i_node->fn_sernum = -1;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|