net: remove DST_NOCACHE flag
DST_NOCACHE flag check has been removed from dst_release() and dst_hold_safe() in a previous patch because all the dst are now ref counted properly and can be released based on refcnt only. Looking at the rest of the DST_NOCACHE use, all of them can now be removed or replaced with other checks. So this patch gets rid of all the DST_NOCACHE usage and remove this flag completely. Signed-off-by: Wei Wang <weiwan@google.com> Acked-by: Martin KaFai Lau <kafai@fb.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
b2a9c0ed75
commit
a4c2fd7f78
@@ -1299,7 +1299,7 @@ static struct fib_nh_exception *find_exception(struct fib_nh *nh, __be32 daddr)
|
||||
}
|
||||
|
||||
static bool rt_bind_exception(struct rtable *rt, struct fib_nh_exception *fnhe,
|
||||
__be32 daddr)
|
||||
__be32 daddr, const bool do_cache)
|
||||
{
|
||||
bool ret = false;
|
||||
|
||||
@@ -1328,7 +1328,7 @@ static bool rt_bind_exception(struct rtable *rt, struct fib_nh_exception *fnhe,
|
||||
if (!rt->rt_gateway)
|
||||
rt->rt_gateway = daddr;
|
||||
|
||||
if (!(rt->dst.flags & DST_NOCACHE)) {
|
||||
if (do_cache) {
|
||||
dst_hold(&rt->dst);
|
||||
rcu_assign_pointer(*porig, rt);
|
||||
if (orig) {
|
||||
@@ -1441,7 +1441,8 @@ static bool rt_cache_valid(const struct rtable *rt)
|
||||
static void rt_set_nexthop(struct rtable *rt, __be32 daddr,
|
||||
const struct fib_result *res,
|
||||
struct fib_nh_exception *fnhe,
|
||||
struct fib_info *fi, u16 type, u32 itag)
|
||||
struct fib_info *fi, u16 type, u32 itag,
|
||||
const bool do_cache)
|
||||
{
|
||||
bool cached = false;
|
||||
|
||||
@@ -1462,8 +1463,8 @@ static void rt_set_nexthop(struct rtable *rt, __be32 daddr,
|
||||
#endif
|
||||
rt->dst.lwtstate = lwtstate_get(nh->nh_lwtstate);
|
||||
if (unlikely(fnhe))
|
||||
cached = rt_bind_exception(rt, fnhe, daddr);
|
||||
else if (!(rt->dst.flags & DST_NOCACHE))
|
||||
cached = rt_bind_exception(rt, fnhe, daddr, do_cache);
|
||||
else if (do_cache)
|
||||
cached = rt_cache_route(nh, rt);
|
||||
if (unlikely(!cached)) {
|
||||
/* Routes we intend to cache in nexthop exception or
|
||||
@@ -1471,7 +1472,6 @@ static void rt_set_nexthop(struct rtable *rt, __be32 daddr,
|
||||
* However, if we are unsuccessful at storing this
|
||||
* route into the cache we really need to set it.
|
||||
*/
|
||||
rt->dst.flags |= DST_NOCACHE;
|
||||
if (!rt->rt_gateway)
|
||||
rt->rt_gateway = daddr;
|
||||
rt_add_uncached_list(rt);
|
||||
@@ -1494,7 +1494,7 @@ struct rtable *rt_dst_alloc(struct net_device *dev,
|
||||
struct rtable *rt;
|
||||
|
||||
rt = dst_alloc(&ipv4_dst_ops, dev, 1, DST_OBSOLETE_FORCE_CHK,
|
||||
(will_cache ? 0 : (DST_HOST | DST_NOCACHE)) |
|
||||
(will_cache ? 0 : DST_HOST) |
|
||||
(nopolicy ? DST_NOPOLICY : 0) |
|
||||
(noxfrm ? DST_NOXFRM : 0));
|
||||
|
||||
@@ -1738,7 +1738,8 @@ rt_cache:
|
||||
|
||||
rth->dst.input = ip_forward;
|
||||
|
||||
rt_set_nexthop(rth, daddr, res, fnhe, res->fi, res->type, itag);
|
||||
rt_set_nexthop(rth, daddr, res, fnhe, res->fi, res->type, itag,
|
||||
do_cache);
|
||||
set_lwt_redirect(rth);
|
||||
skb_dst_set(skb, &rth->dst);
|
||||
out:
|
||||
@@ -2026,10 +2027,8 @@ local_input:
|
||||
rth->dst.input = lwtunnel_input;
|
||||
}
|
||||
|
||||
if (unlikely(!rt_cache_route(nh, rth))) {
|
||||
rth->dst.flags |= DST_NOCACHE;
|
||||
if (unlikely(!rt_cache_route(nh, rth)))
|
||||
rt_add_uncached_list(rth);
|
||||
}
|
||||
}
|
||||
skb_dst_set(skb, &rth->dst);
|
||||
err = 0;
|
||||
@@ -2260,7 +2259,7 @@ add:
|
||||
#endif
|
||||
}
|
||||
|
||||
rt_set_nexthop(rth, fl4->daddr, res, fnhe, fi, type, 0);
|
||||
rt_set_nexthop(rth, fl4->daddr, res, fnhe, fi, type, 0, do_cache);
|
||||
set_lwt_redirect(rth);
|
||||
|
||||
return rth;
|
||||
|
Reference in New Issue
Block a user