|
@@ -156,12 +156,28 @@ static void batadv_orig_node_free_rcu(struct rcu_head *rcu)
|
|
|
kfree(orig_node);
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * batadv_orig_node_free_ref - decrement the orig node refcounter and possibly
|
|
|
+ * schedule an rcu callback for freeing it
|
|
|
+ * @orig_node: the orig node to free
|
|
|
+ */
|
|
|
void batadv_orig_node_free_ref(struct batadv_orig_node *orig_node)
|
|
|
{
|
|
|
if (atomic_dec_and_test(&orig_node->refcount))
|
|
|
call_rcu(&orig_node->rcu, batadv_orig_node_free_rcu);
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * batadv_orig_node_free_ref_now - decrement the orig node refcounter and
|
|
|
+ * possibly free it (without rcu callback)
|
|
|
+ * @orig_node: the orig node to free
|
|
|
+ */
|
|
|
+void batadv_orig_node_free_ref_now(struct batadv_orig_node *orig_node)
|
|
|
+{
|
|
|
+ if (atomic_dec_and_test(&orig_node->refcount))
|
|
|
+ batadv_orig_node_free_rcu(&orig_node->rcu);
|
|
|
+}
|
|
|
+
|
|
|
void batadv_originator_free(struct batadv_priv *bat_priv)
|
|
|
{
|
|
|
struct batadv_hashtable *hash = bat_priv->orig_hash;
|