Lines Matching refs:neigh_node
196 static void batadv_neigh_node_release(struct batadv_neigh_node *neigh_node) in batadv_neigh_node_release() argument
202 bao = neigh_node->orig_node->bat_priv->bat_algo_ops; in batadv_neigh_node_release()
205 &neigh_node->ifinfo_list, list) { in batadv_neigh_node_release()
210 bao->bat_neigh_free(neigh_node); in batadv_neigh_node_release()
212 batadv_hardif_free_ref(neigh_node->if_incoming); in batadv_neigh_node_release()
214 kfree_rcu(neigh_node, rcu); in batadv_neigh_node_release()
222 void batadv_neigh_node_free_ref(struct batadv_neigh_node *neigh_node) in batadv_neigh_node_free_ref() argument
224 if (atomic_dec_and_test(&neigh_node->refcount)) in batadv_neigh_node_free_ref()
225 batadv_neigh_node_release(neigh_node); in batadv_neigh_node_free_ref()
469 struct batadv_neigh_node *neigh_node; in batadv_neigh_node_new() local
471 neigh_node = batadv_neigh_node_get(orig_node, hard_iface, neigh_addr); in batadv_neigh_node_new()
472 if (neigh_node) in batadv_neigh_node_new()
475 neigh_node = kzalloc(sizeof(*neigh_node), GFP_ATOMIC); in batadv_neigh_node_new()
476 if (!neigh_node) in batadv_neigh_node_new()
480 kfree(neigh_node); in batadv_neigh_node_new()
481 neigh_node = NULL; in batadv_neigh_node_new()
485 INIT_HLIST_NODE(&neigh_node->list); in batadv_neigh_node_new()
486 INIT_HLIST_HEAD(&neigh_node->ifinfo_list); in batadv_neigh_node_new()
487 spin_lock_init(&neigh_node->ifinfo_lock); in batadv_neigh_node_new()
489 ether_addr_copy(neigh_node->addr, neigh_addr); in batadv_neigh_node_new()
490 neigh_node->if_incoming = hard_iface; in batadv_neigh_node_new()
491 neigh_node->orig_node = orig_node; in batadv_neigh_node_new()
494 atomic_set(&neigh_node->refcount, 2); in batadv_neigh_node_new()
497 hlist_add_head_rcu(&neigh_node->list, &orig_node->neigh_list); in batadv_neigh_node_new()
505 return neigh_node; in batadv_neigh_node_new()
568 struct batadv_neigh_node *neigh_node; in batadv_orig_node_release() local
574 hlist_for_each_entry_safe(neigh_node, node_tmp, in batadv_orig_node_release()
576 hlist_del_rcu(&neigh_node->list); in batadv_orig_node_release()
577 batadv_neigh_node_free_ref(neigh_node); in batadv_orig_node_release()
819 struct batadv_neigh_node *neigh_node; in batadv_purge_orig_neighbors() local
827 hlist_for_each_entry_safe(neigh_node, node_tmp, in batadv_purge_orig_neighbors()
829 last_seen = neigh_node->last_seen; in batadv_purge_orig_neighbors()
830 if_incoming = neigh_node->if_incoming; in batadv_purge_orig_neighbors()
841 orig_node->orig, neigh_node->addr, in batadv_purge_orig_neighbors()
846 orig_node->orig, neigh_node->addr, in batadv_purge_orig_neighbors()
851 hlist_del_rcu(&neigh_node->list); in batadv_purge_orig_neighbors()
852 batadv_neigh_node_free_ref(neigh_node); in batadv_purge_orig_neighbors()
857 batadv_purge_neigh_ifinfo(bat_priv, neigh_node); in batadv_purge_orig_neighbors()