Lines Matching refs:gw_node
43 static void batadv_gw_node_free_ref(struct batadv_gw_node *gw_node) in batadv_gw_node_free_ref() argument
45 if (atomic_dec_and_test(&gw_node->refcount)) { in batadv_gw_node_free_ref()
46 batadv_orig_node_free_ref(gw_node->orig_node); in batadv_gw_node_free_ref()
47 kfree_rcu(gw_node, rcu); in batadv_gw_node_free_ref()
54 struct batadv_gw_node *gw_node; in batadv_gw_get_selected_gw_node() local
57 gw_node = rcu_dereference(bat_priv->gw.curr_gw); in batadv_gw_get_selected_gw_node()
58 if (!gw_node) in batadv_gw_get_selected_gw_node()
61 if (!atomic_inc_not_zero(&gw_node->refcount)) in batadv_gw_get_selected_gw_node()
62 gw_node = NULL; in batadv_gw_get_selected_gw_node()
66 return gw_node; in batadv_gw_get_selected_gw_node()
72 struct batadv_gw_node *gw_node; in batadv_gw_get_selected_orig() local
75 gw_node = batadv_gw_get_selected_gw_node(bat_priv); in batadv_gw_get_selected_orig()
76 if (!gw_node) in batadv_gw_get_selected_orig()
80 orig_node = gw_node->orig_node; in batadv_gw_get_selected_orig()
90 if (gw_node) in batadv_gw_get_selected_orig()
91 batadv_gw_node_free_ref(gw_node); in batadv_gw_get_selected_orig()
135 struct batadv_gw_node *gw_node, *curr_gw = NULL; in batadv_gw_get_best_gw_node() local
146 hlist_for_each_entry_rcu(gw_node, &bat_priv->gw.list, list) { in batadv_gw_get_best_gw_node()
147 if (gw_node->deleted) in batadv_gw_get_best_gw_node()
150 orig_node = gw_node->orig_node; in batadv_gw_get_best_gw_node()
160 if (!atomic_inc_not_zero(&gw_node->refcount)) in batadv_gw_get_best_gw_node()
168 tmp_gw_factor *= gw_node->bandwidth_down; in batadv_gw_get_best_gw_node()
177 curr_gw = gw_node; in batadv_gw_get_best_gw_node()
192 curr_gw = gw_node; in batadv_gw_get_best_gw_node()
204 batadv_gw_node_free_ref(gw_node); in batadv_gw_get_best_gw_node()
406 struct batadv_gw_node *gw_node; in batadv_gw_node_add() local
414 gw_node = kzalloc(sizeof(*gw_node), GFP_ATOMIC); in batadv_gw_node_add()
415 if (!gw_node) { in batadv_gw_node_add()
420 INIT_HLIST_NODE(&gw_node->list); in batadv_gw_node_add()
421 gw_node->orig_node = orig_node; in batadv_gw_node_add()
422 atomic_set(&gw_node->refcount, 1); in batadv_gw_node_add()
425 hlist_add_head_rcu(&gw_node->list, &bat_priv->gw.list); in batadv_gw_node_add()
448 struct batadv_gw_node *gw_node_tmp, *gw_node = NULL; in batadv_gw_node_get() local
461 gw_node = gw_node_tmp; in batadv_gw_node_get()
466 return gw_node; in batadv_gw_node_get()
480 struct batadv_gw_node *gw_node, *curr_gw = NULL; in batadv_gw_node_update() local
482 gw_node = batadv_gw_node_get(bat_priv, orig_node); in batadv_gw_node_update()
483 if (!gw_node) { in batadv_gw_node_update()
488 if ((gw_node->bandwidth_down == ntohl(gateway->bandwidth_down)) && in batadv_gw_node_update()
489 (gw_node->bandwidth_up == ntohl(gateway->bandwidth_up))) in batadv_gw_node_update()
495 gw_node->bandwidth_down / 10, in batadv_gw_node_update()
496 gw_node->bandwidth_down % 10, in batadv_gw_node_update()
497 gw_node->bandwidth_up / 10, in batadv_gw_node_update()
498 gw_node->bandwidth_up % 10, in batadv_gw_node_update()
504 gw_node->bandwidth_down = ntohl(gateway->bandwidth_down); in batadv_gw_node_update()
505 gw_node->bandwidth_up = ntohl(gateway->bandwidth_up); in batadv_gw_node_update()
507 gw_node->deleted = 0; in batadv_gw_node_update()
509 gw_node->deleted = jiffies; in batadv_gw_node_update()
518 if (gw_node == curr_gw) in batadv_gw_node_update()
525 if (gw_node) in batadv_gw_node_update()
526 batadv_gw_node_free_ref(gw_node); in batadv_gw_node_update()
542 struct batadv_gw_node *gw_node, *curr_gw; in batadv_gw_node_purge() local
551 hlist_for_each_entry_safe(gw_node, node_tmp, in batadv_gw_node_purge()
553 if (((!gw_node->deleted) || in batadv_gw_node_purge()
554 (time_before(jiffies, gw_node->deleted + timeout))) && in batadv_gw_node_purge()
558 if (curr_gw == gw_node) in batadv_gw_node_purge()
561 hlist_del_rcu(&gw_node->list); in batadv_gw_node_purge()
562 batadv_gw_node_free_ref(gw_node); in batadv_gw_node_purge()
578 const struct batadv_gw_node *gw_node) in batadv_write_buffer_text() argument
585 router = batadv_orig_router_get(gw_node->orig_node, BATADV_IF_DEFAULT); in batadv_write_buffer_text()
596 (curr_gw == gw_node ? "=>" : " "), in batadv_write_buffer_text()
597 gw_node->orig_node->orig, in batadv_write_buffer_text()
600 gw_node->bandwidth_down / 10, in batadv_write_buffer_text()
601 gw_node->bandwidth_down % 10, in batadv_write_buffer_text()
602 gw_node->bandwidth_up / 10, in batadv_write_buffer_text()
603 gw_node->bandwidth_up % 10); in batadv_write_buffer_text()
621 struct batadv_gw_node *gw_node; in batadv_gw_client_seq_print_text() local
635 hlist_for_each_entry_rcu(gw_node, &bat_priv->gw.list, list) { in batadv_gw_client_seq_print_text()
636 if (gw_node->deleted) in batadv_gw_client_seq_print_text()
640 if (batadv_write_buffer_text(bat_priv, seq, gw_node) < 0) in batadv_gw_client_seq_print_text()
800 struct batadv_gw_node *gw_node = NULL, *curr_gw = NULL; in batadv_gw_out_of_range() local
814 gw_node = batadv_gw_node_get(bat_priv, orig_dst_node); in batadv_gw_out_of_range()
815 if (!gw_node) in batadv_gw_out_of_range()
874 if (gw_node) in batadv_gw_out_of_range()
875 batadv_gw_node_free_ref(gw_node); in batadv_gw_out_of_range()