batman-adv: Convert batadv_orig_node to kref
batman-adv uses a self-written reference implementation which is just based on atomic_t. This is less obvious when reading the code than kref and therefore increases the change that the reference counting will be missed. Signed-off-by: Sven Eckelmann <sven@narfation.org> Signed-off-by: Marek Lindner <mareklindner@neomailbox.ch> Signed-off-by: Antonio Quartulli <a@unstable.cc>
此提交包含在:
@@ -1334,7 +1334,7 @@ batadv_tt_global_orig_entry_add(struct batadv_tt_global_entry *tt_global,
|
||||
goto out;
|
||||
|
||||
INIT_HLIST_NODE(&orig_entry->list);
|
||||
atomic_inc(&orig_node->refcount);
|
||||
kref_get(&orig_node->refcount);
|
||||
batadv_tt_global_size_inc(orig_node, tt_global->common.vid);
|
||||
orig_entry->orig_node = orig_node;
|
||||
orig_entry->ttvn = ttvn;
|
||||
@@ -2097,7 +2097,7 @@ struct batadv_orig_node *batadv_transtable_search(struct batadv_priv *bat_priv,
|
||||
/* found anything? */
|
||||
if (best_entry)
|
||||
orig_node = best_entry->orig_node;
|
||||
if (orig_node && !atomic_inc_not_zero(&orig_node->refcount))
|
||||
if (orig_node && !kref_get_unless_zero(&orig_node->refcount))
|
||||
orig_node = NULL;
|
||||
rcu_read_unlock();
|
||||
|
||||
|
新增問題並參考
封鎖使用者