Lines Matching refs:nc_path
238 struct batadv_nc_path *nc_path; in batadv_nc_path_release() local
240 nc_path = container_of(ref, struct batadv_nc_path, refcount); in batadv_nc_path_release()
242 kfree_rcu(nc_path, rcu); in batadv_nc_path_release()
250 static void batadv_nc_path_put(struct batadv_nc_path *nc_path) in batadv_nc_path_put() argument
252 if (!nc_path) in batadv_nc_path_put()
255 kref_put(&nc_path->refcount, batadv_nc_path_release); in batadv_nc_path_put()
271 batadv_nc_path_put(nc_packet->nc_path); in batadv_nc_packet_free()
299 struct batadv_nc_path *nc_path) in batadv_nc_to_purge_nc_path_coding() argument
307 return batadv_has_timed_out(nc_path->last_valid, in batadv_nc_to_purge_nc_path_coding()
320 struct batadv_nc_path *nc_path) in batadv_nc_to_purge_nc_path_decoding() argument
328 return batadv_has_timed_out(nc_path->last_valid, in batadv_nc_to_purge_nc_path_decoding()
440 struct batadv_nc_path *nc_path; in batadv_nc_purge_paths() local
450 hlist_for_each_entry_safe(nc_path, node_tmp, head, hash_entry) { in batadv_nc_purge_paths()
454 if (to_purge && !to_purge(bat_priv, nc_path)) in batadv_nc_purge_paths()
462 if (!unlikely(list_empty(&nc_path->packet_list))) { in batadv_nc_purge_paths()
466 nc_path->prev_hop, in batadv_nc_purge_paths()
467 nc_path->next_hop); in batadv_nc_purge_paths()
474 nc_path->prev_hop, nc_path->next_hop); in batadv_nc_purge_paths()
475 hlist_del_rcu(&nc_path->hash_entry); in batadv_nc_purge_paths()
476 batadv_nc_path_put(nc_path); in batadv_nc_purge_paths()
504 const struct batadv_nc_path *nc_path = data; in batadv_nc_hash_choose() local
507 hash = jhash(&nc_path->prev_hop, sizeof(nc_path->prev_hop), hash); in batadv_nc_hash_choose()
508 hash = jhash(&nc_path->next_hop, sizeof(nc_path->next_hop), hash); in batadv_nc_hash_choose()
551 struct batadv_nc_path *nc_path, *nc_path_tmp = NULL; in batadv_nc_hash_find() local
561 hlist_for_each_entry_rcu(nc_path, head, hash_entry) { in batadv_nc_hash_find()
562 if (!batadv_nc_hash_compare(&nc_path->hash_entry, data)) in batadv_nc_hash_find()
565 if (!kref_get_unless_zero(&nc_path->refcount)) in batadv_nc_hash_find()
568 nc_path_tmp = nc_path; in batadv_nc_hash_find()
601 struct batadv_nc_path *nc_path, in batadv_nc_sniffed_purge() argument
607 lockdep_assert_held(&nc_path->packet_list_lock); in batadv_nc_sniffed_purge()
640 struct batadv_nc_path *nc_path, in batadv_nc_fwd_flush() argument
645 lockdep_assert_held(&nc_path->packet_list_lock); in batadv_nc_fwd_flush()
682 struct batadv_nc_path *nc_path; in batadv_nc_process_nc_paths() local
695 hlist_for_each_entry_rcu(nc_path, head, hash_entry) { in batadv_nc_process_nc_paths()
697 spin_lock_bh(&nc_path->packet_list_lock); in batadv_nc_process_nc_paths()
699 &nc_path->packet_list, list) { in batadv_nc_process_nc_paths()
700 ret = process_fn(bat_priv, nc_path, nc_packet); in batadv_nc_process_nc_paths()
704 spin_unlock_bh(&nc_path->packet_list_lock); in batadv_nc_process_nc_paths()
966 struct batadv_nc_path *nc_path, nc_path_key; in batadv_nc_get_path() local
971 nc_path = batadv_nc_hash_find(hash, (void *)&nc_path_key); in batadv_nc_get_path()
973 if (nc_path) { in batadv_nc_get_path()
975 nc_path->last_valid = jiffies; in batadv_nc_get_path()
976 return nc_path; in batadv_nc_get_path()
980 nc_path = kzalloc(sizeof(*nc_path), GFP_ATOMIC); in batadv_nc_get_path()
982 if (!nc_path) in batadv_nc_get_path()
986 INIT_LIST_HEAD(&nc_path->packet_list); in batadv_nc_get_path()
987 spin_lock_init(&nc_path->packet_list_lock); in batadv_nc_get_path()
988 kref_init(&nc_path->refcount); in batadv_nc_get_path()
989 nc_path->last_valid = jiffies; in batadv_nc_get_path()
990 ether_addr_copy(nc_path->next_hop, dst); in batadv_nc_get_path()
991 ether_addr_copy(nc_path->prev_hop, src); in batadv_nc_get_path()
994 nc_path->prev_hop, in batadv_nc_get_path()
995 nc_path->next_hop); in batadv_nc_get_path()
998 kref_get(&nc_path->refcount); in batadv_nc_get_path()
1001 &nc_path->hash_entry); in batadv_nc_get_path()
1004 kfree(nc_path); in batadv_nc_get_path()
1008 return nc_path; in batadv_nc_get_path()
1111 first_source = nc_packet->nc_path->prev_hop; in batadv_nc_code_packets()
1124 second_source = nc_packet->nc_path->prev_hop; in batadv_nc_code_packets()
1276 struct batadv_nc_path *nc_path, nc_path_key; in batadv_nc_path_search() local
1292 hlist_for_each_entry_rcu(nc_path, &hash->table[idx], hash_entry) { in batadv_nc_path_search()
1293 if (!batadv_compare_eth(nc_path->prev_hop, in_nc_node->addr)) in batadv_nc_path_search()
1296 if (!batadv_compare_eth(nc_path->next_hop, out_nc_node->addr)) in batadv_nc_path_search()
1299 spin_lock_bh(&nc_path->packet_list_lock); in batadv_nc_path_search()
1300 if (list_empty(&nc_path->packet_list)) { in batadv_nc_path_search()
1301 spin_unlock_bh(&nc_path->packet_list_lock); in batadv_nc_path_search()
1306 &nc_path->packet_list, list) { in batadv_nc_path_search()
1318 spin_unlock_bh(&nc_path->packet_list_lock); in batadv_nc_path_search()
1475 struct batadv_nc_path *nc_path, in batadv_nc_skb_add_to_path() argument
1490 nc_packet->nc_path = nc_path; in batadv_nc_skb_add_to_path()
1493 spin_lock_bh(&nc_path->packet_list_lock); in batadv_nc_skb_add_to_path()
1494 list_add_tail(&nc_packet->list, &nc_path->packet_list); in batadv_nc_skb_add_to_path()
1495 spin_unlock_bh(&nc_path->packet_list_lock); in batadv_nc_skb_add_to_path()
1514 struct batadv_nc_path *nc_path; in batadv_nc_skb_forward() local
1534 nc_path = batadv_nc_get_path(bat_priv, in batadv_nc_skb_forward()
1539 if (!nc_path) in batadv_nc_skb_forward()
1544 if (!batadv_nc_skb_add_to_path(skb, nc_path, neigh_node, packet_id)) in batadv_nc_skb_forward()
1551 batadv_nc_path_put(nc_path); in batadv_nc_skb_forward()
1567 struct batadv_nc_path *nc_path; in batadv_nc_skb_store_for_decoding() local
1583 nc_path = batadv_nc_get_path(bat_priv, in batadv_nc_skb_store_for_decoding()
1588 if (!nc_path) in batadv_nc_skb_store_for_decoding()
1604 if (!batadv_nc_skb_add_to_path(skb, nc_path, NULL, packet_id)) in batadv_nc_skb_store_for_decoding()
1613 batadv_nc_path_put(nc_path); in batadv_nc_skb_store_for_decoding()
1748 struct batadv_nc_path *nc_path, nc_path_key; in batadv_nc_find_decoding_packet() local
1771 hlist_for_each_entry_rcu(nc_path, &hash->table[index], hash_entry) { in batadv_nc_find_decoding_packet()
1773 spin_lock_bh(&nc_path->packet_list_lock); in batadv_nc_find_decoding_packet()
1775 &nc_path->packet_list, list) { in batadv_nc_find_decoding_packet()
1783 spin_unlock_bh(&nc_path->packet_list_lock); in batadv_nc_find_decoding_packet()