From: Sven Eckelmann <[email protected]>

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 <[email protected]>
Signed-off-by: Simon Wunderlich <[email protected]>
---
 net/batman-adv/originator.c        |  2 +-
 net/batman-adv/routing.c           |  4 ++--
 net/batman-adv/send.c              |  2 +-
 net/batman-adv/translation-table.c | 16 ++++++++--------
 net/batman-adv/types.h             |  2 +-
 5 files changed, 13 insertions(+), 13 deletions(-)

diff --git a/net/batman-adv/originator.c b/net/batman-adv/originator.c
index 0ce07bfdade59..d05c8240426bd 100644
--- a/net/batman-adv/originator.c
+++ b/net/batman-adv/originator.c
@@ -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;
diff --git a/net/batman-adv/routing.c b/net/batman-adv/routing.c
index 1dd295d934f49..cd4368b846add 100644
--- a/net/batman-adv/routing.c
+++ b/net/batman-adv/routing.c
@@ -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);
        }
 
diff --git a/net/batman-adv/send.c b/net/batman-adv/send.c
index c7e86c83242a2..5f9da3606a8f5 100644
--- a/net/batman-adv/send.c
+++ b/net/batman-adv/send.c
@@ -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;
diff --git a/net/batman-adv/translation-table.c 
b/net/batman-adv/translation-table.c
index e319b0796f7c8..8903b2f84f512 100644
--- a/net/batman-adv/translation-table.c
+++ b/net/batman-adv/translation-table.c
@@ -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);
diff --git a/net/batman-adv/types.h b/net/batman-adv/types.h
index 7533d71b73725..c188ec1cfb748 100644
--- a/net/batman-adv/types.h
+++ b/net/batman-adv/types.h
@@ -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;
-- 
2.47.3

Reply via email to