-
-struct tt_global_entry holds a reference to an orig_node which must be
-decremented before deallocating the structure.
-
-Signed-off-by: Simon Wunderlich <siwu@hrz.tu-chemnitz.de>
----
- compat.c | 8 --------
- compat.h | 1 -
- translation-table.c | 14 +++++++++++++-
- 3 files changed, 13 insertions(+), 10 deletions(-)
-
---- a/compat.c
-+++ b/compat.c
-@@ -36,12 +36,4 @@ void free_rcu_tt_local_entry(struct rcu_head *rcu)
- kfree(tt_local_entry);
- }
-
--void free_rcu_tt_global_entry(struct rcu_head *rcu)
--{
-- struct tt_global_entry *tt_global_entry;
--
-- tt_global_entry = container_of(rcu, struct tt_global_entry, rcu);
-- kfree(tt_global_entry);
--}
--
- #endif /* < KERNEL_VERSION(3, 0, 0) */
---- a/compat.h
-+++ b/compat.h
-@@ -63,7 +63,6 @@ void free_rcu_gw_node(struct rcu_head *rcu);
- void free_rcu_neigh_node(struct rcu_head *rcu);
- void free_rcu_softif_neigh(struct rcu_head *rcu);
- void free_rcu_tt_local_entry(struct rcu_head *rcu);
--void free_rcu_tt_global_entry(struct rcu_head *rcu);
-
- #endif /* < KERNEL_VERSION(3, 0, 0) */
-
---- a/translation-table.c
-+++ b/translation-table.c
-@@ -137,10 +137,22 @@ static void tt_local_entry_free_ref(struct tt_local_entry *tt_local_entry)
- kfree_rcu(tt_local_entry, rcu);
- }
-
-+static void tt_global_entry_free_rcu(struct rcu_head *rcu)
-+{
-+ struct tt_global_entry *tt_global_entry;
-+
-+ tt_global_entry = container_of(rcu, struct tt_global_entry, rcu);
-+
-+ if (tt_global_entry->orig_node)
-+ orig_node_free_ref(tt_global_entry->orig_node);
-+
-+ kfree(tt_global_entry);
-+}
-+
- static void tt_global_entry_free_ref(struct tt_global_entry *tt_global_entry)
- {
- if (atomic_dec_and_test(&tt_global_entry->refcount))
-- kfree_rcu(tt_global_entry, rcu);
-+ call_rcu(&tt_global_entry->rcu, tt_global_entry_free_rcu);
- }
-
- static void tt_local_event(struct bat_priv *bat_priv, const uint8_t *addr,
-