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

Commit f1d33063 authored by Greg Kroah-Hartman's avatar Greg Kroah-Hartman
Browse files

Revert "ipv6: make ip6_rt_gc_expire an atomic_t"



This reverts commit b4cfbeae which is
commit 9cb7c013420f98fa6fd12fc6a5dc055170c108db upstream.

It breaks the Android kernel abi and can be brought back in the future
in an abi-safe way if it is really needed.

Bug: 161946584
Change-Id: Idad46376e176f54a1d6781bdb432131bed7844f2
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@google.com>
parent 9aada1f3
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -72,7 +72,7 @@ struct netns_ipv6 {
	struct dst_ops		ip6_dst_ops;
	rwlock_t		fib6_walker_lock;
	spinlock_t		fib6_gc_lock;
	atomic_t		ip6_rt_gc_expire;
	unsigned int		 ip6_rt_gc_expire;
	unsigned long		 ip6_rt_last_gc;
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
	unsigned int		fib6_rules_require_fldissect;
+5 −6
Original line number Diff line number Diff line
@@ -2775,7 +2775,6 @@ static int ip6_dst_gc(struct dst_ops *ops)
	int rt_elasticity = net->ipv6.sysctl.ip6_rt_gc_elasticity;
	int rt_gc_timeout = net->ipv6.sysctl.ip6_rt_gc_timeout;
	unsigned long rt_last_gc = net->ipv6.ip6_rt_last_gc;
	unsigned int val;
	int entries;

	entries = dst_entries_get_fast(ops);
@@ -2786,13 +2785,13 @@ static int ip6_dst_gc(struct dst_ops *ops)
	    entries <= rt_max_size)
		goto out;

	fib6_run_gc(atomic_inc_return(&net->ipv6.ip6_rt_gc_expire), net, true);
	net->ipv6.ip6_rt_gc_expire++;
	fib6_run_gc(net->ipv6.ip6_rt_gc_expire, net, true);
	entries = dst_entries_get_slow(ops);
	if (entries < ops->gc_thresh)
		atomic_set(&net->ipv6.ip6_rt_gc_expire, rt_gc_timeout >> 1);
		net->ipv6.ip6_rt_gc_expire = rt_gc_timeout>>1;
out:
	val = atomic_read(&net->ipv6.ip6_rt_gc_expire);
	atomic_set(&net->ipv6.ip6_rt_gc_expire, val - (val >> rt_elasticity));
	net->ipv6.ip6_rt_gc_expire -= net->ipv6.ip6_rt_gc_expire>>rt_elasticity;
	return entries > rt_max_size;
}

@@ -5321,7 +5320,7 @@ static int __net_init ip6_route_net_init(struct net *net)
	net->ipv6.sysctl.ip6_rt_mtu_expires = 10*60*HZ;
	net->ipv6.sysctl.ip6_rt_min_advmss = IPV6_MIN_MTU - 20 - 40;

	atomic_set(&net->ipv6.ip6_rt_gc_expire, 30*HZ);
	net->ipv6.ip6_rt_gc_expire = 30*HZ;

	ret = 0;
out: