dst_cache
(struct dst_cache *)&info->dst_cache : NULL);
(struct dst_cache *) &info->dst_cache : NULL);
use_cache ? &info->dst_cache : NULL);
use_cache ? &info->dst_cache : NULL);
(struct dst_cache *)&info->dst_cache : NULL);
(struct dst_cache *)&info->dst_cache : NULL);
use_cache ? &info->dst_cache : NULL);
use_cache ? &info->dst_cache : NULL);
dst_cache_reset(&geneve->cfg.info.dst_cache);
dst_cache_reset(&cfg.info.dst_cache);
err = dst_cache_init(&geneve->cfg.info.dst_cache, GFP_KERNEL);
dst_cache_destroy(&geneve->cfg.info.dst_cache);
dst_cache_reset(&peer->dst_cache);
ret = dst_cache_init(&peer->dst_cache, GFP_KERNEL);
dst_cache_reset(&peer->dst_cache);
dst_cache_destroy(&peer->dst_cache);
struct dst_cache dst_cache;
struct dst_cache *cache, struct sock *sk,
struct dst_cache *cache, struct sock *sk,
static int ovpn_udp_output(struct ovpn_peer *peer, struct dst_cache *cache,
ret = ovpn_udp_output(peer, &peer->dst_cache, sk, skb);
struct dst_cache *dst_cache;
dst_cache = &rdst->dst_cache;
dst_cache = &info->dst_cache;
tos, use_cache ? dst_cache : NULL);
use_cache ? dst_cache : NULL);
&info->dst_cache);
&info->dst_cache);
dst_cache_reset(&rd->dst_cache);
dst_cache_init(&rd->dst_cache, GFP_ATOMIC | __GFP_NOWARN);
dst_cache_destroy(&rd->dst_cache);
dst_cache_destroy(&rd->dst_cache);
dst_cache_destroy(&rd->dst_cache);
dst_cache_destroy(&rd->dst_cache);
err = dst_cache_init(&rd->dst_cache, GFP_KERNEL);
struct dst_cache endpoint_cache;
struct endpoint *endpoint, u8 ds, struct dst_cache *cache)
struct endpoint *endpoint, u8 ds, struct dst_cache *cache)
void dst_cache_destroy(struct dst_cache *dst_cache);
struct dst_entry *dst_cache_get(struct dst_cache *dst_cache);
struct rtable *dst_cache_get_ip4(struct dst_cache *dst_cache, __be32 *saddr);
void dst_cache_set_ip4(struct dst_cache *dst_cache, struct dst_entry *dst,
void dst_cache_set_ip6(struct dst_cache *dst_cache, struct dst_entry *dst,
struct dst_entry *dst_cache_get_ip6(struct dst_cache *dst_cache,
static inline void dst_cache_reset(struct dst_cache *dst_cache)
WRITE_ONCE(dst_cache->reset_ts, jiffies);
void dst_cache_reset_now(struct dst_cache *dst_cache);
int dst_cache_init(struct dst_cache *dst_cache, gfp_t gfp);
if (new_md->u.tun_info.dst_cache.cache) {
ret = dst_cache_init(&new_md->u.tun_info.dst_cache, GFP_ATOMIC);
struct dst_cache dst_cache; /* cached dst */
struct dst_cache dst_cache;
struct dst_cache dst_cache;
struct dst_entry *dst_cache; /* destination cache entry */
struct dst_entry *dst_cache;
struct dst_cache *dst_cache);
struct dst_cache *dst_cache);
struct dst_cache dst_cache;
dst_cache_reset_now(&md_dst->u.tun_info.dst_cache);
dst_cache_destroy(&md_dst->u.tun_info.dst_cache);
dst_cache_destroy(&one_md_dst->u.tun_info.dst_cache);
void dst_cache_set_ip4(struct dst_cache *dst_cache, struct dst_entry *dst,
if (!dst_cache->cache)
local_lock_nested_bh(&dst_cache->cache->bh_lock);
idst = this_cpu_ptr(dst_cache->cache);
local_unlock_nested_bh(&dst_cache->cache->bh_lock);
void dst_cache_set_ip6(struct dst_cache *dst_cache, struct dst_entry *dst,
if (!dst_cache->cache)
local_lock_nested_bh(&dst_cache->cache->bh_lock);
idst = this_cpu_ptr(dst_cache->cache);
local_unlock_nested_bh(&dst_cache->cache->bh_lock);
struct dst_entry *dst_cache_get_ip6(struct dst_cache *dst_cache,
if (!dst_cache->cache)
local_lock_nested_bh(&dst_cache->cache->bh_lock);
idst = this_cpu_ptr(dst_cache->cache);
dst = dst_cache_per_cpu_get(dst_cache, idst);
local_unlock_nested_bh(&dst_cache->cache->bh_lock);
local_unlock_nested_bh(&dst_cache->cache->bh_lock);
int dst_cache_init(struct dst_cache *dst_cache, gfp_t gfp)
dst_cache->cache = alloc_percpu_gfp(struct dst_cache_pcpu,
if (!dst_cache->cache)
local_lock_init(&per_cpu_ptr(dst_cache->cache, i)->bh_lock);
dst_cache_reset(dst_cache);
void dst_cache_destroy(struct dst_cache *dst_cache)
if (!dst_cache->cache)
dst_release(per_cpu_ptr(dst_cache->cache, i)->dst);
free_percpu(dst_cache->cache);
void dst_cache_reset_now(struct dst_cache *dst_cache)
if (!dst_cache->cache)
dst_cache_reset(dst_cache);
struct dst_cache_pcpu *idst = per_cpu_ptr(dst_cache->cache, i);
static void dst_cache_per_cpu_dst_set(struct dst_cache_pcpu *dst_cache,
dst_release(dst_cache->dst);
dst_cache->cookie = cookie;
dst_cache->dst = dst;
static struct dst_entry *dst_cache_per_cpu_get(struct dst_cache *dst_cache,
READ_ONCE(dst_cache->reset_ts)) ||
struct dst_entry *dst_cache_get(struct dst_cache *dst_cache)
if (!dst_cache->cache)
local_lock_nested_bh(&dst_cache->cache->bh_lock);
dst = dst_cache_per_cpu_get(dst_cache, this_cpu_ptr(dst_cache->cache));
local_unlock_nested_bh(&dst_cache->cache->bh_lock);
struct rtable *dst_cache_get_ip4(struct dst_cache *dst_cache, __be32 *saddr)
if (!dst_cache->cache)
local_lock_nested_bh(&dst_cache->cache->bh_lock);
idst = this_cpu_ptr(dst_cache->cache);
dst = dst_cache_per_cpu_get(dst_cache, idst);
local_unlock_nested_bh(&dst_cache->cache->bh_lock);
local_unlock_nested_bh(&dst_cache->cache->bh_lock);
dst_cache_destroy(&tunnel->dst_cache);
err = dst_cache_init(&tunnel->dst_cache, GFP_KERNEL);
dst_cache_destroy(&tunnel->dst_cache);
dst_cache_reset(&tunnel->dst_cache);
dst_cache_reset(&tunnel->dst_cache);
rt = dst_cache_get_ip4(&tun_info->dst_cache, &fl4.saddr);
dst_cache_set_ip4(&tun_info->dst_cache, &rt->dst,
rt = dst_cache_get_ip4(&tun_info->dst_cache,
rt = connected ? dst_cache_get_ip4(&tunnel->dst_cache,
dst_cache_set_ip4(&tun_info->dst_cache, &rt->dst,
dst_cache_set_ip4(&tunnel->dst_cache, &rt->dst,
dst_cache_reset(&t->dst_cache);
err = dst_cache_init(&tun_info->dst_cache, GFP_KERNEL);
dst_cache_destroy(&tun_info->dst_cache);
struct dst_cache *dst_cache)
if (dst_cache) {
rt = dst_cache_get_ip4(dst_cache, saddr);
if (dst_cache)
dst_cache_set_ip4(dst_cache, &rt->dst, fl4.saddr);
struct dst_cache dst_cache;
ret = dst_cache_init(&ilwt->dst_cache, GFP_ATOMIC);
dst_cache_destroy(&ila_lwt_lwtunnel(lwt)->dst_cache);
dst = dst_cache_get(&ilwt->dst_cache);
dst_cache_set_ip6(&ilwt->dst_cache, dst, &fl6.saddr);
struct dst_cache cache;
dst_cache_reset(&t->dst_cache);
dst_cache_destroy(&t->dst_cache);
ret = dst_cache_init(&tunnel->dst_cache, GFP_KERNEL);
dst_cache_destroy(&tunnel->dst_cache);
ret = dst_cache_init(&tunnel->dst_cache, GFP_KERNEL);
dst_cache_destroy(&tunnel->dst_cache);
dst_cache_reset(&t->dst_cache);
dst_cache_reset(&t->dst_cache);
dst = dst_cache_get(&t->dst_cache);
dst_cache_set_ip6(&t->dst_cache, ndst, &fl6->saddr);
dst_cache_reset(&t->dst_cache);
ret = dst_cache_init(&t->dst_cache, GFP_KERNEL);
dst_cache_destroy(&t->dst_cache);
dst_cache_destroy(&t->dst_cache);
dst_cache_reset(&t->dst_cache);
struct dst_cache *dst_cache)
if (dst_cache) {
dst = dst_cache_get_ip6(dst_cache, saddr);
if (dst_cache)
dst_cache_set_ip6(dst_cache, dst, &fl6.saddr);
dst_cache_reset(&t->dst_cache);
struct dst_cache cache;
struct dst_cache cache_input;
struct dst_cache cache_output;
dst_cache_reset(&t->dst_cache);
dst_cache_reset(&t->dst_cache);
dst_cache_destroy(&tunnel->dst_cache);
err = dst_cache_init(&tunnel->dst_cache, GFP_KERNEL);
dst_cache_reset(&t->dst_cache);
dst_cache_reset(&tunnel->dst_cache);
rt = dst_cache_get_ip4(&tunnel->dst_cache, &fl4.saddr);
dst_cache_set_ip4(&tunnel->dst_cache, &rt->dst, fl4.saddr);
mtu = dst_mtu(dest_dst->dst_cache);
if (dest_dst && dest_dst->dst_cache->dev == dev) {
dst_release(dest_dst->dst_cache);
rt = dst_rtable(dest_dst->dst_cache);
rt = dst_rt6_info(dest_dst->dst_cache);
dest_dst->dst_cache = dst;
dst = dest_dst->dst_cache;
flow_tuple->dst_cache = dst;
dst_release(flow->tuplehash[dir].tuple.dst_cache);
return rt6_get_cookie(dst_rt6_info(flow_tuple->dst_cache));
rt = dst_rt6_info(tuplehash->tuple.dst_cache);
rt = dst_rt6_info(tuplehash->tuple.dst_cache);
return dst_check(tuple->dst_cache, tuple->dst_cookie);
struct rtable *rt = dst_rtable(tuple->dst_cache);
struct rtable *rt = dst_rtable(tuple->dst_cache);
rt = dst_rtable(tuplehash->tuple.dst_cache);
rt = dst_rtable(tuplehash->tuple.dst_cache);
const struct dst_entry *dst_cache;
dst_cache = this_tuple->dst_cache;
n = dst_neigh_lookup(dst_cache, daddr);
dst = this_tuple->dst_cache;
dst = other_tuple->dst_cache;
other_dst = other_tuple->dst_cache;
struct dst_entry *dst_cache,
route->tuple[!dir].in.ifindex = dst_cache->dev->ifindex;
route->tuple[dir].dst = dst_cache;
route->tuple[dir].xmit_type = nft_xmit_type(dst_cache);
const struct dst_entry *dst_cache,
struct net_device *dev = dst_cache->dev;
n = dst_neigh_lookup(dst_cache, daddr);
err = dst_cache_init(&md->u.tun_info.dst_cache, GFP_KERNEL_ACCOUNT);
err = dst_cache_init(&tun_dst->u.tun_info.dst_cache, GFP_KERNEL);
ret = dst_cache_init(&metadata->u.tun_info.dst_cache, GFP_KERNEL);
struct udp_media_addr *dst, struct dst_cache *cache)
&ub->rcast.dst_cache);
&rcast->dst_cache);
if (dst_cache_init(&rcast->dst_cache, GFP_ATOMIC)) {
err = dst_cache_init(&ub->rcast.dst_cache, GFP_ATOMIC);
dst_cache_destroy(&ub->rcast.dst_cache);
dst_cache_destroy(&rcast->dst_cache);
dst_cache_destroy(&ub->rcast.dst_cache);
struct dst_cache dst_cache;