batman-adv: don't use call_rcu if not needed
authorAntonio Quartulli <ordex@autistici.org>
Mon, 6 May 2013 22:29:22 +0000 (00:29 +0200)
committerAntonio Quartulli <antonio@meshcoding.com>
Sat, 12 Oct 2013 07:51:28 +0000 (09:51 +0200)
batadv_tt_global_entry_free_ref uses call_rcu to schedule a
function which will only free the global entry itself.

For this reason call_rcu is useless and kfree_rcu can be
used to simplify the code.

Signed-off-by: Antonio Quartulli <ordex@autistici.org>
Signed-off-by: Marek Lindner <lindner_marek@yahoo.de>
net/batman-adv/translation-table.c

index b3c43691bc6cf77b557a7d5deef000b9d9453e15..34fa6cc381c913ba1b5f3a0f5f4edc76b9109e4f 100644 (file)
@@ -117,25 +117,17 @@ batadv_tt_local_entry_free_ref(struct batadv_tt_local_entry *tt_local_entry)
                kfree_rcu(tt_local_entry, common.rcu);
 }
 
-static void batadv_tt_global_entry_free_rcu(struct rcu_head *rcu)
-{
-       struct batadv_tt_common_entry *tt_common_entry;
-       struct batadv_tt_global_entry *tt_global_entry;
-
-       tt_common_entry = container_of(rcu, struct batadv_tt_common_entry, rcu);
-       tt_global_entry = container_of(tt_common_entry,
-                                      struct batadv_tt_global_entry, common);
-
-       kfree(tt_global_entry);
-}
-
+/**
+ * batadv_tt_global_entry_free_ref - decrement the refcounter for a
+ *  tt_global_entry and possibly free it
+ * @tt_global_entry: the object to free
+ */
 static void
 batadv_tt_global_entry_free_ref(struct batadv_tt_global_entry *tt_global_entry)
 {
        if (atomic_dec_and_test(&tt_global_entry->common.refcount)) {
                batadv_tt_global_del_orig_list(tt_global_entry);
-               call_rcu(&tt_global_entry->common.rcu,
-                        batadv_tt_global_entry_free_rcu);
+               kfree_rcu(tt_global_entry, common.rcu);
        }
 }