mirror of
https://github.com/torvalds/linux.git
synced 2026-07-28 01:55:51 +02:00
batman-adv: replace non-atomic last_ttvn with (READ|WRITE)_ONCE
The last TT version number of an meshif is only accessed as plain loads/stores and does not require full atomic_t semantics. Convert to an native integer and replace its users with READ_ONCE()/WRITE_ONCE() to avoid load/store tearing. Signed-off-by: Sven Eckelmann <sven@narfation.org>
This commit is contained in:
parent
58020571b5
commit
4dd2055046
|
|
@ -965,7 +965,7 @@ struct batadv_orig_node *batadv_orig_node_new(struct batadv_priv *bat_priv,
|
|||
orig_node->bat_priv = bat_priv;
|
||||
ether_addr_copy(orig_node->orig, addr);
|
||||
batadv_dat_init_orig_node_addr(orig_node);
|
||||
atomic_set(&orig_node->last_ttvn, 0);
|
||||
WRITE_ONCE(orig_node->last_ttvn, 0);
|
||||
orig_node->tt_buff = NULL;
|
||||
orig_node->tt_buff_len = 0;
|
||||
orig_node->last_seen = jiffies;
|
||||
|
|
|
|||
|
|
@ -765,7 +765,7 @@ batadv_reroute_unicast_packet(struct batadv_priv *bat_priv, struct sk_buff *skb,
|
|||
goto out;
|
||||
|
||||
orig_addr = orig_node->orig;
|
||||
orig_ttvn = (u8)atomic_read(&orig_node->last_ttvn);
|
||||
orig_ttvn = READ_ONCE(orig_node->last_ttvn);
|
||||
}
|
||||
|
||||
/* update the packet header */
|
||||
|
|
@ -845,7 +845,7 @@ static bool batadv_check_unicast_ttvn(struct batadv_priv *bat_priv,
|
|||
if (!orig_node)
|
||||
return false;
|
||||
|
||||
curr_ttvn = (u8)atomic_read(&orig_node->last_ttvn);
|
||||
curr_ttvn = READ_ONCE(orig_node->last_ttvn);
|
||||
batadv_orig_node_put(orig_node);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -222,7 +222,7 @@ batadv_send_skb_push_fill_unicast(struct sk_buff *skb, int hdr_size,
|
|||
struct batadv_orig_node *orig_node)
|
||||
{
|
||||
struct batadv_unicast_packet *unicast_packet;
|
||||
u8 ttvn = (u8)atomic_read(&orig_node->last_ttvn);
|
||||
u8 ttvn = READ_ONCE(orig_node->last_ttvn);
|
||||
|
||||
if (batadv_skb_head_push(skb, hdr_size) < 0)
|
||||
return false;
|
||||
|
|
|
|||
|
|
@ -841,7 +841,7 @@ batadv_tt_prepare_tvlv_global_data(struct batadv_orig_node *orig_node,
|
|||
}
|
||||
|
||||
(*tt_data)->flags = BATADV_NO_FLAGS;
|
||||
(*tt_data)->ttvn = atomic_read(&orig_node->last_ttvn);
|
||||
(*tt_data)->ttvn = READ_ONCE(orig_node->last_ttvn);
|
||||
(*tt_data)->num_vlan = htons(num_vlan);
|
||||
|
||||
tt_vlan = (*tt_data)->vlan_data;
|
||||
|
|
@ -1822,7 +1822,7 @@ batadv_tt_global_dump_subentry(struct sk_buff *msg, u32 portid, u32 seq,
|
|||
if (!hdr)
|
||||
return -ENOBUFS;
|
||||
|
||||
last_ttvn = atomic_read(&orig->orig_node->last_ttvn);
|
||||
last_ttvn = READ_ONCE(orig->orig_node->last_ttvn);
|
||||
|
||||
if (nla_put(msg, BATADV_ATTR_TT_ADDRESS, ETH_ALEN, common->addr) ||
|
||||
nla_put(msg, BATADV_ATTR_ORIG_ADDRESS, ETH_ALEN,
|
||||
|
|
@ -3013,7 +3013,7 @@ static bool batadv_send_other_tt_response(struct batadv_priv *bat_priv,
|
|||
if (!res_dst_orig_node)
|
||||
goto out;
|
||||
|
||||
orig_ttvn = (u8)atomic_read(&req_dst_orig_node->last_ttvn);
|
||||
orig_ttvn = READ_ONCE(req_dst_orig_node->last_ttvn);
|
||||
req_ttvn = tt_data->ttvn;
|
||||
|
||||
/* this node doesn't have the requested data */
|
||||
|
|
@ -3300,7 +3300,7 @@ static void batadv_tt_fill_gtable(struct batadv_priv *bat_priv,
|
|||
orig_node->tt_buff = NULL;
|
||||
spin_unlock_bh(&orig_node->tt_buff_lock);
|
||||
|
||||
atomic_set(&orig_node->last_ttvn, ttvn);
|
||||
WRITE_ONCE(orig_node->last_ttvn, ttvn);
|
||||
|
||||
out:
|
||||
batadv_orig_node_put(orig_node);
|
||||
|
|
@ -3316,7 +3316,7 @@ static void batadv_tt_update_changes(struct batadv_priv *bat_priv,
|
|||
|
||||
batadv_tt_save_orig_buffer(bat_priv, orig_node, tt_change,
|
||||
batadv_tt_len(tt_num_changes));
|
||||
atomic_set(&orig_node->last_ttvn, ttvn);
|
||||
WRITE_ONCE(orig_node->last_ttvn, ttvn);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -3769,7 +3769,7 @@ static void batadv_tt_update_orig(struct batadv_priv *bat_priv,
|
|||
struct batadv_tvlv_tt_change *tt_change,
|
||||
u16 tt_num_changes, u8 ttvn)
|
||||
{
|
||||
u8 orig_ttvn = (u8)atomic_read(&orig_node->last_ttvn);
|
||||
u8 orig_ttvn = READ_ONCE(orig_node->last_ttvn);
|
||||
struct batadv_tvlv_tt_vlan_data *tt_vlan;
|
||||
bool full_table = true;
|
||||
bool has_tt_init;
|
||||
|
|
@ -3911,7 +3911,7 @@ bool batadv_tt_add_temporary_global_entry(struct batadv_priv *bat_priv,
|
|||
|
||||
if (!batadv_tt_global_add(bat_priv, orig_node, addr, vid,
|
||||
BATADV_TT_CLIENT_TEMP,
|
||||
atomic_read(&orig_node->last_ttvn)))
|
||||
READ_ONCE(orig_node->last_ttvn)))
|
||||
return false;
|
||||
|
||||
batadv_dbg(BATADV_DBG_TT, bat_priv,
|
||||
|
|
@ -4125,7 +4125,7 @@ static int batadv_roam_tvlv_unicast_handler_v1(struct batadv_priv *bat_priv,
|
|||
|
||||
batadv_tt_global_add(bat_priv, orig_node, roaming_adv->client,
|
||||
ntohs(roaming_adv->vid), BATADV_TT_CLIENT_ROAM,
|
||||
atomic_read(&orig_node->last_ttvn) + 1);
|
||||
READ_ONCE(orig_node->last_ttvn) + 1);
|
||||
|
||||
out:
|
||||
batadv_orig_node_put(orig_node);
|
||||
|
|
|
|||
|
|
@ -464,7 +464,7 @@ struct batadv_orig_node {
|
|||
unsigned long capa_initialized;
|
||||
|
||||
/** @last_ttvn: last seen translation table version number */
|
||||
atomic_t last_ttvn;
|
||||
u8 last_ttvn;
|
||||
|
||||
/** @tt_buff: last tt changeset this node received from the orig node */
|
||||
unsigned char *tt_buff;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user