From: Wei Wang <[email protected]>
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?