Skip to content

Commit 26f8f9f

Browse files
committed
batman-adv: replace non-atomic vlan config fields with (READ|WRITE)_ONCE
The vlan configuration values are only accessed as plain loads/stores and do not require full atomic_t semantics. Convert these fields to native integer types and replace their users with READ_ONCE()/WRITE_ONCE() to avoid load/store tearing. Signed-off-by: Sven Eckelmann <sven@narfation.org>
1 parent dbb48d9 commit 26f8f9f

5 files changed

Lines changed: 8 additions & 8 deletions

File tree

net/batman-adv/main.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -627,7 +627,7 @@ bool batadv_vlan_ap_isola_get(struct batadv_priv *bat_priv, unsigned short vid)
627627
*/
628628
vlan = batadv_meshif_vlan_get(bat_priv, vid);
629629
if (vlan) {
630-
ap_isolation_enabled = atomic_read(&vlan->ap_isolation);
630+
ap_isolation_enabled = READ_ONCE(vlan->ap_isolation);
631631
batadv_meshif_vlan_put(vlan);
632632
}
633633

net/batman-adv/mesh-interface.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -567,7 +567,7 @@ int batadv_meshif_create_vlan(struct batadv_priv *bat_priv, unsigned short vid)
567567
vlan->vid = vid;
568568
kref_init(&vlan->refcount);
569569

570-
atomic_set(&vlan->ap_isolation, 0);
570+
WRITE_ONCE(vlan->ap_isolation, 0);
571571

572572
kref_get(&vlan->refcount);
573573
hlist_add_head_rcu(&vlan->list, &bat_priv->meshif_vlan_list);

net/batman-adv/netlink.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ static int batadv_netlink_mesh_fill_ap_isolation(struct sk_buff *msg,
181181
if (!vlan)
182182
return 0;
183183

184-
ap_isolation = atomic_read(&vlan->ap_isolation);
184+
ap_isolation = READ_ONCE(vlan->ap_isolation);
185185
batadv_meshif_vlan_put(vlan);
186186

187187
return nla_put_u8(msg, BATADV_ATTR_AP_ISOLATION_ENABLED,
@@ -204,7 +204,7 @@ static int batadv_netlink_set_mesh_ap_isolation(struct nlattr *attr,
204204
if (!vlan)
205205
return -ENOENT;
206206

207-
atomic_set(&vlan->ap_isolation, !!nla_get_u8(attr));
207+
WRITE_ONCE(vlan->ap_isolation, !!nla_get_u8(attr));
208208
batadv_meshif_vlan_put(vlan);
209209

210210
return 0;
@@ -1022,7 +1022,7 @@ static int batadv_netlink_vlan_fill(struct sk_buff *msg,
10221022
goto nla_put_failure;
10231023

10241024
if (nla_put_u8(msg, BATADV_ATTR_AP_ISOLATION_ENABLED,
1025-
!!atomic_read(&vlan->ap_isolation)))
1025+
!!READ_ONCE(vlan->ap_isolation)))
10261026
goto nla_put_failure;
10271027

10281028
genlmsg_end(msg, hdr);
@@ -1110,7 +1110,7 @@ static int batadv_netlink_set_vlan(struct sk_buff *skb, struct genl_info *info)
11101110
if (info->attrs[BATADV_ATTR_AP_ISOLATION_ENABLED]) {
11111111
attr = info->attrs[BATADV_ATTR_AP_ISOLATION_ENABLED];
11121112

1113-
atomic_set(&vlan->ap_isolation, !!nla_get_u8(attr));
1113+
WRITE_ONCE(vlan->ap_isolation, !!nla_get_u8(attr));
11141114
}
11151115

11161116
batadv_netlink_notify_vlan(bat_priv, vlan);

net/batman-adv/translation-table.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3730,7 +3730,7 @@ bool batadv_is_ap_isolated(struct batadv_priv *bat_priv, u8 *src, u8 *dst,
37303730
if (!vlan)
37313731
return false;
37323732

3733-
if (!atomic_read(&vlan->ap_isolation))
3733+
if (!READ_ONCE(vlan->ap_isolation))
37343734
goto vlan_put;
37353735

37363736
tt_local_entry = batadv_tt_local_hash_find(bat_priv, dst, vid);

net/batman-adv/types.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1459,7 +1459,7 @@ struct batadv_meshif_vlan {
14591459
unsigned short vid;
14601460

14611461
/** @ap_isolation: AP isolation state */
1462-
atomic_t ap_isolation; /* boolean */
1462+
u8 ap_isolation; /* boolean */
14631463

14641464
/** @tt: TT private attributes (VLAN specific) */
14651465
struct batadv_vlan_tt tt;

0 commit comments

Comments
 (0)