From: Wei Wang <tracyw...@gmail.com>
Date: Tue, 18 Jun 2019 11:25:41 -0700

> @@ -237,13 +240,16 @@ static int __fib6_rule_action(struct fib_rule *rule, 
> struct flowi *flp,
>                       goto out;
>       }
>  again:
> -     ip6_rt_put(rt);
> +     if (!(flags & RT6_LOOKUP_F_DST_NOREF) ||
> +         !list_empty(&rt->rt6i_uncached))
> +             ip6_rt_put(rt);

This conditional release logic, with the special treatment of uncache items
when using DST_NOREF, seems error prone.

Maybe you can put this logic into a helper like ip6_rt_put_any() and do the
list empty test etc. there?

        ip6_rt_put_any(struct rt6_info *rt, int flags);

What do you think?

Reply via email to