batman-adv: Protect global TQ window with a spinlock
Signed-off-by: Linus Lüssing <linus.luessing@web.de> Signed-off-by: Marek Lindner <lindner_marek@yahoo.de> Signed-off-by: Sven Eckelmann <sven@narfation.org>
This commit is contained in:
parent
e1a5382f97
commit
68003903e4
|
@ -102,6 +102,7 @@ struct neigh_node *create_neighbor(struct orig_node *orig_node,
|
|||
|
||||
INIT_HLIST_NODE(&neigh_node->list);
|
||||
INIT_LIST_HEAD(&neigh_node->bonding_list);
|
||||
spin_lock_init(&neigh_node->tq_lock);
|
||||
|
||||
memcpy(neigh_node->addr, neigh, ETH_ALEN);
|
||||
neigh_node->orig_node = orig_neigh_node;
|
||||
|
|
|
@ -415,10 +415,12 @@ static void update_orig(struct bat_priv *bat_priv,
|
|||
if (is_duplicate)
|
||||
continue;
|
||||
|
||||
spin_lock_bh(&tmp_neigh_node->tq_lock);
|
||||
ring_buffer_set(tmp_neigh_node->tq_recv,
|
||||
&tmp_neigh_node->tq_index, 0);
|
||||
tmp_neigh_node->tq_avg =
|
||||
ring_buffer_avg(tmp_neigh_node->tq_recv);
|
||||
spin_unlock_bh(&tmp_neigh_node->tq_lock);
|
||||
}
|
||||
|
||||
if (!neigh_node) {
|
||||
|
@ -443,10 +445,12 @@ static void update_orig(struct bat_priv *bat_priv,
|
|||
orig_node->flags = batman_packet->flags;
|
||||
neigh_node->last_valid = jiffies;
|
||||
|
||||
spin_lock_bh(&neigh_node->tq_lock);
|
||||
ring_buffer_set(neigh_node->tq_recv,
|
||||
&neigh_node->tq_index,
|
||||
batman_packet->tq);
|
||||
neigh_node->tq_avg = ring_buffer_avg(neigh_node->tq_recv);
|
||||
spin_unlock_bh(&neigh_node->tq_lock);
|
||||
|
||||
if (!is_duplicate) {
|
||||
orig_node->last_ttl = batman_packet->ttl;
|
||||
|
|
|
@ -125,6 +125,7 @@ struct neigh_node {
|
|||
struct rcu_head rcu;
|
||||
struct orig_node *orig_node;
|
||||
struct hard_iface *if_incoming;
|
||||
spinlock_t tq_lock; /* protects: tq_recv, tq_index */
|
||||
};
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue