sysctl,rcu: Convert call_rcu(free_head) to kfree
Paul E. McKenney [Mon, 2 May 2011 06:21:00 +0000 (23:21 -0700)]
The RCU callback free_head just calls kfree(), so we can use kfree_rcu()
instead of call_rcu().

Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Reviewed-by: Josh Triplett <josh@joshtriplett.org>

kernel/sysctl.c

index f175d98..11d65b5 100644 (file)
@@ -1590,16 +1590,11 @@ void sysctl_head_get(struct ctl_table_header *head)
        spin_unlock(&sysctl_lock);
 }
 
-static void free_head(struct rcu_head *rcu)
-{
-       kfree(container_of(rcu, struct ctl_table_header, rcu));
-}
-
 void sysctl_head_put(struct ctl_table_header *head)
 {
        spin_lock(&sysctl_lock);
        if (!--head->count)
-               call_rcu(&head->rcu, free_head);
+               kfree_rcu(head, rcu);
        spin_unlock(&sysctl_lock);
 }
 
@@ -1971,10 +1966,10 @@ void unregister_sysctl_table(struct ctl_table_header * header)
        start_unregistering(header);
        if (!--header->parent->count) {
                WARN_ON(1);
-               call_rcu(&header->parent->rcu, free_head);
+               kfree_rcu(header->parent, rcu);
        }
        if (!--header->count)
-               call_rcu(&header->rcu, free_head);
+               kfree_rcu(header, rcu);
        spin_unlock(&sysctl_lock);
 }