delayed_work);
bat_priv = netdev_priv(forw_packet->if_incoming->mesh_iface);
- if (atomic_read(&bat_priv->mesh_state) == BATADV_MESH_DEACTIVATING) {
+ if (READ_ONCE(bat_priv->mesh_state) == BATADV_MESH_DEACTIVATING) {
dropped = true;
goto out;
}
hard_iface = container_of(bat_v, struct batadv_hard_iface, bat_v);
bat_priv = netdev_priv(hard_iface->mesh_iface);
- if (atomic_read(&bat_priv->mesh_state) == BATADV_MESH_DEACTIVATING)
+ if (READ_ONCE(bat_priv->mesh_state) == BATADV_MESH_DEACTIVATING)
goto out;
/* we are in the process of shutting this interface down */
lockdep_assert_held(&bat_priv->bat_v.ogm_buff_mutex);
- if (atomic_read(&bat_priv->mesh_state) == BATADV_MESH_DEACTIVATING)
+ if (READ_ONCE(bat_priv->mesh_state) == BATADV_MESH_DEACTIVATING)
goto out;
ogm_buff = &bat_priv->bat_v.ogm_buff;
ret = batadv_originator_init(bat_priv);
if (ret < 0) {
- atomic_set(&bat_priv->mesh_state, BATADV_MESH_DEACTIVATING);
+ WRITE_ONCE(bat_priv->mesh_state, BATADV_MESH_DEACTIVATING);
goto err_orig;
}
ret = batadv_tt_init(bat_priv);
if (ret < 0) {
- atomic_set(&bat_priv->mesh_state, BATADV_MESH_DEACTIVATING);
+ WRITE_ONCE(bat_priv->mesh_state, BATADV_MESH_DEACTIVATING);
goto err_tt;
}
ret = batadv_v_mesh_init(bat_priv);
if (ret < 0) {
- atomic_set(&bat_priv->mesh_state, BATADV_MESH_DEACTIVATING);
+ WRITE_ONCE(bat_priv->mesh_state, BATADV_MESH_DEACTIVATING);
goto err_v;
}
ret = batadv_bla_init(bat_priv);
if (ret < 0) {
- atomic_set(&bat_priv->mesh_state, BATADV_MESH_DEACTIVATING);
+ WRITE_ONCE(bat_priv->mesh_state, BATADV_MESH_DEACTIVATING);
goto err_bla;
}
ret = batadv_dat_init(bat_priv);
if (ret < 0) {
- atomic_set(&bat_priv->mesh_state, BATADV_MESH_DEACTIVATING);
+ WRITE_ONCE(bat_priv->mesh_state, BATADV_MESH_DEACTIVATING);
goto err_dat;
}
batadv_mcast_init(bat_priv);
atomic_set(&bat_priv->gw.reselect, 0);
- atomic_set(&bat_priv->mesh_state, BATADV_MESH_ACTIVE);
+ WRITE_ONCE(bat_priv->mesh_state, BATADV_MESH_ACTIVE);
return 0;
batadv_originator_free(bat_priv);
err_orig:
batadv_purge_outstanding_packets(bat_priv, NULL);
- atomic_set(&bat_priv->mesh_state, BATADV_MESH_INACTIVE);
+ WRITE_ONCE(bat_priv->mesh_state, BATADV_MESH_INACTIVE);
return ret;
}
{
struct batadv_priv *bat_priv = netdev_priv(mesh_iface);
- atomic_set(&bat_priv->mesh_state, BATADV_MESH_DEACTIVATING);
+ WRITE_ONCE(bat_priv->mesh_state, BATADV_MESH_DEACTIVATING);
batadv_purge_outstanding_packets(bat_priv, NULL);
batadv_tp_stop_all(bat_priv);
free_percpu(bat_priv->bat_counters);
bat_priv->bat_counters = NULL;
- atomic_set(&bat_priv->mesh_state, BATADV_MESH_INACTIVE);
+ WRITE_ONCE(bat_priv->mesh_state, BATADV_MESH_INACTIVE);
}
/**
bat_priv = netdev_priv(hard_iface->mesh_iface);
- if (atomic_read(&bat_priv->mesh_state) != BATADV_MESH_ACTIVE)
+ if (READ_ONCE(bat_priv->mesh_state) != BATADV_MESH_ACTIVE)
goto err_free;
/* discard frames on not active interfaces */
eth_hw_addr_set(dev, addr->sa_data);
/* only modify transtable if it has been initialized before */
- if (atomic_read(&bat_priv->mesh_state) != BATADV_MESH_ACTIVE)
+ if (READ_ONCE(bat_priv->mesh_state) != BATADV_MESH_ACTIVE)
return 0;
rcu_read_lock();
int network_offset = ETH_HLEN;
__be16 proto;
- if (atomic_read(&bat_priv->mesh_state) != BATADV_MESH_ACTIVE)
+ if (READ_ONCE(bat_priv->mesh_state) != BATADV_MESH_ACTIVE)
goto dropped;
/* reset control block to avoid left overs from previous users */
atomic_set(&bat_priv->bcast_queue_left, BATADV_BCAST_QUEUE_LEN);
atomic_set(&bat_priv->batman_queue_left, BATADV_BATMAN_QUEUE_LEN);
- atomic_set(&bat_priv->mesh_state, BATADV_MESH_INACTIVE);
+ WRITE_ONCE(bat_priv->mesh_state, BATADV_MESH_INACTIVE);
atomic_set(&bat_priv->bcast_seqno, 1);
atomic_set(&bat_priv->tt.vn, 0);
atomic_set(&bat_priv->tt.ogm_append_cnt, 0);
delayed_work);
bat_priv = netdev_priv(forw_packet->if_incoming->mesh_iface);
- if (atomic_read(&bat_priv->mesh_state) == BATADV_MESH_DEACTIVATING) {
+ if (READ_ONCE(bat_priv->mesh_state) == BATADV_MESH_DEACTIVATING) {
dropped = true;
goto out;
}
/* look for an already existing test towards this node */
spin_lock_bh(&bat_priv->tp_list_lock);
- if (atomic_read(&bat_priv->mesh_state) != BATADV_MESH_ACTIVE) {
+ if (READ_ONCE(bat_priv->mesh_state) != BATADV_MESH_ACTIVE) {
spin_unlock_bh(&bat_priv->tp_list_lock);
batadv_tp_batctl_error_notify(BATADV_TP_REASON_DST_UNREACHABLE,
dst, bat_priv, session_cookie);
struct batadv_tp_vars *tp_vars = NULL;
spin_lock_bh(&bat_priv->tp_list_lock);
- if (atomic_read(&bat_priv->mesh_state) != BATADV_MESH_ACTIVE)
+ if (READ_ONCE(bat_priv->mesh_state) != BATADV_MESH_ACTIVE)
goto out_unlock;
tp_vars = batadv_tp_list_find_session(bat_priv, icmp->orig,
{
struct batadv_icmp_tp_packet *icmp;
- if (atomic_read(&bat_priv->mesh_state) != BATADV_MESH_ACTIVE)
+ if (READ_ONCE(bat_priv->mesh_state) != BATADV_MESH_ACTIVE)
goto out;
icmp = (struct batadv_icmp_tp_packet *)skb->data;
* @mesh_state: current status of the mesh
* (inactive/active/deactivating)
*/
- atomic_t mesh_state;
+ enum batadv_mesh_state mesh_state;
/** @mesh_iface: net device which holds this struct as private data */
struct net_device *mesh_iface;