Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

net,rcu: convert call_rcu(net_generic_release) to kfree_rcu()

The rcu callback net_generic_release() just calls a kfree(),
so we use kfree_rcu() instead of the call_rcu(net_generic_release).

Signed-off-by: Lai Jiangshan <laijs@cn.fujitsu.com>
Acked-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Reviewed-by: Josh Triplett <josh@joshtriplett.org>

authored by

Lai Jiangshan and committed by
Paul E. McKenney
04d4dfed 6b262232

+1 -9
+1 -9
net/core/net_namespace.c
··· 27 27 28 28 #define INITIAL_NET_GEN_PTRS 13 /* +1 for len +2 for rcu_head */ 29 29 30 - static void net_generic_release(struct rcu_head *rcu) 31 - { 32 - struct net_generic *ng; 33 - 34 - ng = container_of(rcu, struct net_generic, rcu); 35 - kfree(ng); 36 - } 37 - 38 30 static int net_assign_generic(struct net *net, int id, void *data) 39 31 { 40 32 struct net_generic *ng, *old_ng; ··· 60 68 memcpy(&ng->ptr, &old_ng->ptr, old_ng->len * sizeof(void*)); 61 69 62 70 rcu_assign_pointer(net->gen, ng); 63 - call_rcu(&old_ng->rcu, net_generic_release); 71 + kfree_rcu(old_ng, rcu); 64 72 assign: 65 73 ng->ptr[id - 1] = data; 66 74 return 0;