Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b2a9c0ed authored by Wei Wang's avatar Wei Wang Committed by David S. Miller
Browse files

net: remove DST_NOGC flag



Now that all the components have been changed to release dst based on
refcnt only and not depend on dst gc anymore, we can remove the
temporary flag DST_NOGC.

Note that we also need to remove the DST_NOCACHE check in dst_release()
and dst_hold_safe() because now all the dst are released based on refcnt
and behaves as DST_NOCACHE.

Signed-off-by: default avatarWei Wang <weiwan@google.com>
Acked-by: default avatarMartin KaFai Lau <kafai@fb.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 5b7c9a8f
Loading
Loading
Loading
Loading
+1 −5
Original line number Diff line number Diff line
@@ -57,7 +57,6 @@ struct dst_entry {
#define DST_XFRM_TUNNEL		0x0080
#define DST_XFRM_QUEUE		0x0100
#define DST_METADATA		0x0200
#define DST_NOGC		0x0400

	short			error;

@@ -336,10 +335,7 @@ static inline void skb_dst_force(struct sk_buff *skb)
 */
static inline bool dst_hold_safe(struct dst_entry *dst)
{
	if (dst->flags & (DST_NOCACHE | DST_NOGC))
	return atomic_inc_not_zero(&dst->__refcnt);
	dst_hold(dst);
	return true;
}

/**
+1 −3
Original line number Diff line number Diff line
@@ -179,14 +179,12 @@ void dst_release(struct dst_entry *dst)
{
	if (dst) {
		int newrefcnt;
		unsigned short destroy_after_rcu = dst->flags &
						   (DST_NOCACHE | DST_NOGC);

		newrefcnt = atomic_dec_return(&dst->__refcnt);
		if (unlikely(newrefcnt < 0))
			net_warn_ratelimited("%s: dst:%p refcnt:%d\n",
					     __func__, dst, newrefcnt);
		if (!newrefcnt && unlikely(destroy_after_rcu))
		if (!newrefcnt)
			call_rcu(&dst->rcu_head, dst_destroy_rcu);
	}
}
+2 −4
Original line number Diff line number Diff line
@@ -1179,8 +1179,7 @@ static int dn_route_output_slow(struct dst_entry **pprt, const struct flowidn *o
	if (dev_out->flags & IFF_LOOPBACK)
		flags |= RTCF_LOCAL;

	rt = dst_alloc(&dn_dst_ops, dev_out, 1, DST_OBSOLETE_NONE,
		       DST_HOST | DST_NOGC);
	rt = dst_alloc(&dn_dst_ops, dev_out, 1, DST_OBSOLETE_NONE, DST_HOST);
	if (rt == NULL)
		goto e_nobufs;

@@ -1445,8 +1444,7 @@ static int dn_route_input_slow(struct sk_buff *skb)
	}

make_route:
	rt = dst_alloc(&dn_dst_ops, out_dev, 1, DST_OBSOLETE_NONE,
		       DST_HOST | DST_NOGC);
	rt = dst_alloc(&dn_dst_ops, out_dev, 1, DST_OBSOLETE_NONE, DST_HOST);
	if (rt == NULL)
		goto e_nobufs;

+2 −3
Original line number Diff line number Diff line
@@ -1496,8 +1496,7 @@ struct rtable *rt_dst_alloc(struct net_device *dev,
	rt = dst_alloc(&ipv4_dst_ops, dev, 1, DST_OBSOLETE_FORCE_CHK,
		       (will_cache ? 0 : (DST_HOST | DST_NOCACHE)) |
		       (nopolicy ? DST_NOPOLICY : 0) |
		       (noxfrm ? DST_NOXFRM : 0) |
		       DST_NOGC);
		       (noxfrm ? DST_NOXFRM : 0));

	if (rt) {
		rt->rt_genid = rt_genid_ipv4(dev_net(dev));
@@ -2503,7 +2502,7 @@ struct dst_entry *ipv4_blackhole_route(struct net *net, struct dst_entry *dst_or
	struct rtable *ort = (struct rtable *) dst_orig;
	struct rtable *rt;

	rt = dst_alloc(&ipv4_dst_blackhole_ops, NULL, 1, DST_OBSOLETE_NONE, DST_NOGC);
	rt = dst_alloc(&ipv4_dst_blackhole_ops, NULL, 1, DST_OBSOLETE_NONE, 0);
	if (rt) {
		struct dst_entry *new = &rt->dst;

+2 −3
Original line number Diff line number Diff line
@@ -354,8 +354,7 @@ static struct rt6_info *__ip6_dst_alloc(struct net *net,
					int flags)
{
	struct rt6_info *rt = dst_alloc(&net->ipv6.ip6_dst_ops, dev,
					1, DST_OBSOLETE_FORCE_CHK,
					flags | DST_NOGC);
					1, DST_OBSOLETE_FORCE_CHK, flags);

	if (rt)
		rt6_info_init(rt);
@@ -1255,7 +1254,7 @@ struct dst_entry *ip6_blackhole_route(struct net *net, struct dst_entry *dst_ori
	struct dst_entry *new = NULL;

	rt = dst_alloc(&ip6_dst_blackhole_ops, loopback_dev, 1,
		       DST_OBSOLETE_NONE, DST_NOGC);
		       DST_OBSOLETE_NONE, 0);
	if (rt) {
		rt6_info_init(rt);

Loading