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);
|
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)
|
void xt_rateest_put(struct xt_rateest *est)
|
||||||
{
|
{
|
||||||
mutex_lock(&xt_rateest_mutex);
|
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,
|
* gen_estimator est_timer() might access est->lock or bstats,
|
||||||
* wait a RCU grace period before freeing 'est'
|
* 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);
|
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)
|
static void __exit xt_rateest_tg_fini(void)
|
||||||
{
|
{
|
||||||
xt_unregister_target(&xt_rateest_tg_reg);
|
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