|
@@ -141,13 +141,14 @@ static void tt_orig_list_entry_free_rcu(struct rcu_head *rcu)
|
|
|
struct tt_orig_list_entry *orig_entry;
|
|
|
|
|
|
orig_entry = container_of(rcu, struct tt_orig_list_entry, rcu);
|
|
|
- atomic_dec(&orig_entry->orig_node->tt_size);
|
|
|
orig_node_free_ref(orig_entry->orig_node);
|
|
|
kfree(orig_entry);
|
|
|
}
|
|
|
|
|
|
static void tt_orig_list_entry_free_ref(struct tt_orig_list_entry *orig_entry)
|
|
|
{
|
|
|
+ /* to avoid race conditions, immediately decrease the tt counter */
|
|
|
+ atomic_dec(&orig_entry->orig_node->tt_size);
|
|
|
call_rcu(&orig_entry->rcu, tt_orig_list_entry_free_rcu);
|
|
|
}
|
|
|
|
|
@@ -910,7 +911,6 @@ void tt_global_del_orig(struct bat_priv *bat_priv,
|
|
|
}
|
|
|
spin_unlock_bh(list_lock);
|
|
|
}
|
|
|
- atomic_set(&orig_node->tt_size, 0);
|
|
|
orig_node->tt_initialised = false;
|
|
|
}
|
|
|
|