diff options
author | Ido Schimmel <idosch@mellanox.com> | 2017-08-03 14:28:25 +0300 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2017-08-04 01:36:00 +0300 |
commit | a460aa83963b185a32a6377eb486b6e613ac8e38 (patch) | |
tree | 03992757839f1f03ae32475f966e300f7addf432 /include/net/ip6_fib.h | |
parent | fc882fcff1ee774cb6be9d3c714ae5ab9eec5aa4 (diff) | |
download | linux-a460aa83963b185a32a6377eb486b6e613ac8e38.tar.xz |
ipv6: fib: Add helpers to hold / drop a reference on rt6_info
Similar to commit 1c677b3d2828 ("ipv4: fib: Add fib_info_hold() helper")
and commit b423cb10807b ("ipv4: fib: Export free_fib_info()") add an
helper to hold a reference on rt6_info and export rt6_release() to drop
it and potentially release the route.
This is needed so that drivers capable of FIB offload could hold a
reference on the route before queueing it for offload and drop it after
the route has been programmed to the device's tables.
Signed-off-by: Ido Schimmel <idosch@mellanox.com>
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/net/ip6_fib.h')
-rw-r--r-- | include/net/ip6_fib.h | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/include/net/ip6_fib.h b/include/net/ip6_fib.h index 0b3052157e6b..1d790ea40ea7 100644 --- a/include/net/ip6_fib.h +++ b/include/net/ip6_fib.h @@ -187,6 +187,22 @@ static inline void ip6_rt_put(struct rt6_info *rt) dst_release(&rt->dst); } +void rt6_free_pcpu(struct rt6_info *non_pcpu_rt); + +static inline void rt6_hold(struct rt6_info *rt) +{ + atomic_inc(&rt->rt6i_ref); +} + +static inline void rt6_release(struct rt6_info *rt) +{ + if (atomic_dec_and_test(&rt->rt6i_ref)) { + rt6_free_pcpu(rt); + dst_dev_put(&rt->dst); + dst_release(&rt->dst); + } +} + enum fib6_walk_state { #ifdef CONFIG_IPV6_SUBTREES FWS_S, |