net,rcu: Convert call_rcu(xt_rateest_free_rcu) to kfree_rcu()
The RCU callback xt_rateest_free_rcu() just calls kfree(), so we can use kfree_rcu() instead of call_rcu(). This also allows us to dispense with an rcu_barrier() call, speeding up unloading of this module. Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com> Cc: Patrick McHardy <kaber@trash.net> Reviewed-by: Josh Triplett <josh@joshtriplett.org>
This commit is contained in:
parent
a95cded32d
commit
cefcb60201
|
@ -60,11 +60,6 @@ struct xt_rateest *xt_rateest_lookup(const char *name)
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(xt_rateest_lookup);
|
||||
|
||||
static void xt_rateest_free_rcu(struct rcu_head *head)
|
||||
{
|
||||
kfree(container_of(head, struct xt_rateest, rcu));
|
||||
}
|
||||
|
||||
void xt_rateest_put(struct xt_rateest *est)
|
||||
{
|
||||
mutex_lock(&xt_rateest_mutex);
|
||||
|
@ -75,7 +70,7 @@ void xt_rateest_put(struct xt_rateest *est)
|
|||
* gen_estimator est_timer() might access est->lock or bstats,
|
||||
* wait a RCU grace period before freeing 'est'
|
||||
*/
|
||||
call_rcu(&est->rcu, xt_rateest_free_rcu);
|
||||
kfree_rcu(est, rcu);
|
||||
}
|
||||
mutex_unlock(&xt_rateest_mutex);
|
||||
}
|
||||
|
@ -188,7 +183,6 @@ static int __init xt_rateest_tg_init(void)
|
|||
static void __exit xt_rateest_tg_fini(void)
|
||||
{
|
||||
xt_unregister_target(&xt_rateest_tg_reg);
|
||||
rcu_barrier(); /* Wait for completion of call_rcu()'s (xt_rateest_free_rcu) */
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue