|
|
@@ -1613,6 +1613,8 @@ batadv_tt_global_orig_entry_add(struct batadv_tt_global_entry *tt_global,
|
|
|
{
|
|
|
struct batadv_tt_orig_list_entry *orig_entry;
|
|
|
|
|
|
+ spin_lock_bh(&tt_global->list_lock);
|
|
|
+
|
|
|
orig_entry = batadv_tt_global_orig_entry_find(tt_global, orig_node);
|
|
|
if (orig_entry) {
|
|
|
/* refresh the ttvn: the current value could be a bogus one that
|
|
|
@@ -1635,11 +1637,9 @@ batadv_tt_global_orig_entry_add(struct batadv_tt_global_entry *tt_global,
|
|
|
orig_entry->flags = flags;
|
|
|
kref_init(&orig_entry->refcount);
|
|
|
|
|
|
- spin_lock_bh(&tt_global->list_lock);
|
|
|
kref_get(&orig_entry->refcount);
|
|
|
hlist_add_head_rcu(&orig_entry->list,
|
|
|
&tt_global->orig_list);
|
|
|
- spin_unlock_bh(&tt_global->list_lock);
|
|
|
atomic_inc(&tt_global->orig_list_count);
|
|
|
|
|
|
sync_flags:
|
|
|
@@ -1647,6 +1647,8 @@ sync_flags:
|
|
|
out:
|
|
|
if (orig_entry)
|
|
|
batadv_tt_orig_list_entry_put(orig_entry);
|
|
|
+
|
|
|
+ spin_unlock_bh(&tt_global->list_lock);
|
|
|
}
|
|
|
|
|
|
/**
|