Lines Matching refs:dat_entry
69 static void batadv_dat_entry_free_ref(struct batadv_dat_entry *dat_entry) in batadv_dat_entry_free_ref() argument
71 if (atomic_dec_and_test(&dat_entry->refcount)) in batadv_dat_entry_free_ref()
72 kfree_rcu(dat_entry, rcu); in batadv_dat_entry_free_ref()
81 static bool batadv_dat_to_purge(struct batadv_dat_entry *dat_entry) in batadv_dat_to_purge() argument
83 return batadv_has_timed_out(dat_entry->last_update, in batadv_dat_to_purge()
102 struct batadv_dat_entry *dat_entry; in __batadv_dat_purge() local
115 hlist_for_each_entry_safe(dat_entry, node_tmp, head, in __batadv_dat_purge()
120 if (to_purge && !to_purge(dat_entry)) in __batadv_dat_purge()
123 hlist_del_rcu(&dat_entry->hash_entry); in __batadv_dat_purge()
124 batadv_dat_entry_free_ref(dat_entry); in __batadv_dat_purge()
266 struct batadv_dat_entry to_find, *dat_entry, *dat_entry_tmp = NULL; in batadv_dat_entry_hash_find() local
280 hlist_for_each_entry_rcu(dat_entry, head, hash_entry) { in batadv_dat_entry_hash_find()
281 if (dat_entry->ip != ip) in batadv_dat_entry_hash_find()
284 if (!atomic_inc_not_zero(&dat_entry->refcount)) in batadv_dat_entry_hash_find()
287 dat_entry_tmp = dat_entry; in batadv_dat_entry_hash_find()
305 struct batadv_dat_entry *dat_entry; in batadv_dat_entry_add() local
308 dat_entry = batadv_dat_entry_hash_find(bat_priv, ip, vid); in batadv_dat_entry_add()
310 if (dat_entry) { in batadv_dat_entry_add()
311 if (!batadv_compare_eth(dat_entry->mac_addr, mac_addr)) in batadv_dat_entry_add()
312 ether_addr_copy(dat_entry->mac_addr, mac_addr); in batadv_dat_entry_add()
313 dat_entry->last_update = jiffies; in batadv_dat_entry_add()
316 &dat_entry->ip, dat_entry->mac_addr, in batadv_dat_entry_add()
321 dat_entry = kmalloc(sizeof(*dat_entry), GFP_ATOMIC); in batadv_dat_entry_add()
322 if (!dat_entry) in batadv_dat_entry_add()
325 dat_entry->ip = ip; in batadv_dat_entry_add()
326 dat_entry->vid = vid; in batadv_dat_entry_add()
327 ether_addr_copy(dat_entry->mac_addr, mac_addr); in batadv_dat_entry_add()
328 dat_entry->last_update = jiffies; in batadv_dat_entry_add()
329 atomic_set(&dat_entry->refcount, 2); in batadv_dat_entry_add()
332 batadv_hash_dat, dat_entry, in batadv_dat_entry_add()
333 &dat_entry->hash_entry); in batadv_dat_entry_add()
337 batadv_dat_entry_free_ref(dat_entry); in batadv_dat_entry_add()
342 &dat_entry->ip, dat_entry->mac_addr, BATADV_PRINT_VID(vid)); in batadv_dat_entry_add()
345 if (dat_entry) in batadv_dat_entry_add()
346 batadv_dat_entry_free_ref(dat_entry); in batadv_dat_entry_add()
791 struct batadv_dat_entry *dat_entry; in batadv_dat_cache_seq_print_text() local
810 hlist_for_each_entry_rcu(dat_entry, head, hash_entry) { in batadv_dat_cache_seq_print_text()
811 last_seen_jiffies = jiffies - dat_entry->last_update; in batadv_dat_cache_seq_print_text()
818 &dat_entry->ip, dat_entry->mac_addr, in batadv_dat_cache_seq_print_text()
819 BATADV_PRINT_VID(dat_entry->vid), in batadv_dat_cache_seq_print_text()
947 struct batadv_dat_entry *dat_entry = NULL; in batadv_dat_snoop_outgoing_arp_request() local
973 dat_entry = batadv_dat_entry_hash_find(bat_priv, ip_dst, vid); in batadv_dat_snoop_outgoing_arp_request()
974 if (dat_entry) { in batadv_dat_snoop_outgoing_arp_request()
983 if (batadv_is_my_client(bat_priv, dat_entry->mac_addr, vid)) { in batadv_dat_snoop_outgoing_arp_request()
990 dat_entry->mac_addr, hw_src); in batadv_dat_snoop_outgoing_arp_request()
1014 if (dat_entry) in batadv_dat_snoop_outgoing_arp_request()
1015 batadv_dat_entry_free_ref(dat_entry); in batadv_dat_snoop_outgoing_arp_request()
1035 struct batadv_dat_entry *dat_entry = NULL; in batadv_dat_snoop_incoming_arp_request() local
1058 dat_entry = batadv_dat_entry_hash_find(bat_priv, ip_dst, vid); in batadv_dat_snoop_incoming_arp_request()
1059 if (!dat_entry) in batadv_dat_snoop_incoming_arp_request()
1064 dat_entry->mac_addr, hw_src); in batadv_dat_snoop_incoming_arp_request()
1094 if (dat_entry) in batadv_dat_snoop_incoming_arp_request()
1095 batadv_dat_entry_free_ref(dat_entry); in batadv_dat_snoop_incoming_arp_request()
1213 struct batadv_dat_entry *dat_entry = NULL; in batadv_dat_drop_broadcast_packet() local
1234 dat_entry = batadv_dat_entry_hash_find(bat_priv, ip_dst, vid); in batadv_dat_drop_broadcast_packet()
1236 if (!dat_entry) { in batadv_dat_drop_broadcast_packet()
1247 if (dat_entry) in batadv_dat_drop_broadcast_packet()
1248 batadv_dat_entry_free_ref(dat_entry); in batadv_dat_drop_broadcast_packet()