Lines Matching refs:gw_node
62 static void batadv_gw_node_free_ref(struct batadv_gw_node *gw_node) in batadv_gw_node_free_ref() argument
64 if (atomic_dec_and_test(&gw_node->refcount)) { in batadv_gw_node_free_ref()
65 batadv_orig_node_free_ref(gw_node->orig_node); in batadv_gw_node_free_ref()
66 kfree_rcu(gw_node, rcu); in batadv_gw_node_free_ref()
73 struct batadv_gw_node *gw_node; in batadv_gw_get_selected_gw_node() local
76 gw_node = rcu_dereference(bat_priv->gw.curr_gw); in batadv_gw_get_selected_gw_node()
77 if (!gw_node) in batadv_gw_get_selected_gw_node()
80 if (!atomic_inc_not_zero(&gw_node->refcount)) in batadv_gw_get_selected_gw_node()
81 gw_node = NULL; in batadv_gw_get_selected_gw_node()
85 return gw_node; in batadv_gw_get_selected_gw_node()
91 struct batadv_gw_node *gw_node; in batadv_gw_get_selected_orig() local
94 gw_node = batadv_gw_get_selected_gw_node(bat_priv); in batadv_gw_get_selected_orig()
95 if (!gw_node) in batadv_gw_get_selected_orig()
99 orig_node = gw_node->orig_node; in batadv_gw_get_selected_orig()
109 if (gw_node) in batadv_gw_get_selected_orig()
110 batadv_gw_node_free_ref(gw_node); in batadv_gw_get_selected_orig()
154 struct batadv_gw_node *gw_node, *curr_gw = NULL; in batadv_gw_get_best_gw_node() local
162 hlist_for_each_entry_rcu(gw_node, &bat_priv->gw.list, list) { in batadv_gw_get_best_gw_node()
163 orig_node = gw_node->orig_node; in batadv_gw_get_best_gw_node()
173 if (!atomic_inc_not_zero(&gw_node->refcount)) in batadv_gw_get_best_gw_node()
181 tmp_gw_factor *= gw_node->bandwidth_down; in batadv_gw_get_best_gw_node()
190 curr_gw = gw_node; in batadv_gw_get_best_gw_node()
205 curr_gw = gw_node; in batadv_gw_get_best_gw_node()
217 batadv_gw_node_free_ref(gw_node); in batadv_gw_get_best_gw_node()
421 struct batadv_gw_node *gw_node; in batadv_gw_node_add() local
429 gw_node = kzalloc(sizeof(*gw_node), GFP_ATOMIC); in batadv_gw_node_add()
430 if (!gw_node) { in batadv_gw_node_add()
435 INIT_HLIST_NODE(&gw_node->list); in batadv_gw_node_add()
436 gw_node->orig_node = orig_node; in batadv_gw_node_add()
437 gw_node->bandwidth_down = ntohl(gateway->bandwidth_down); in batadv_gw_node_add()
438 gw_node->bandwidth_up = ntohl(gateway->bandwidth_up); in batadv_gw_node_add()
439 atomic_set(&gw_node->refcount, 1); in batadv_gw_node_add()
442 hlist_add_head_rcu(&gw_node->list, &bat_priv->gw.list); in batadv_gw_node_add()
465 struct batadv_gw_node *gw_node_tmp, *gw_node = NULL; in batadv_gw_node_get() local
475 gw_node = gw_node_tmp; in batadv_gw_node_get()
480 return gw_node; in batadv_gw_node_get()
494 struct batadv_gw_node *gw_node, *curr_gw = NULL; in batadv_gw_node_update() local
496 gw_node = batadv_gw_node_get(bat_priv, orig_node); in batadv_gw_node_update()
497 if (!gw_node) { in batadv_gw_node_update()
502 if ((gw_node->bandwidth_down == ntohl(gateway->bandwidth_down)) && in batadv_gw_node_update()
503 (gw_node->bandwidth_up == ntohl(gateway->bandwidth_up))) in batadv_gw_node_update()
509 gw_node->bandwidth_down / 10, in batadv_gw_node_update()
510 gw_node->bandwidth_down % 10, in batadv_gw_node_update()
511 gw_node->bandwidth_up / 10, in batadv_gw_node_update()
512 gw_node->bandwidth_up % 10, in batadv_gw_node_update()
518 gw_node->bandwidth_down = ntohl(gateway->bandwidth_down); in batadv_gw_node_update()
519 gw_node->bandwidth_up = ntohl(gateway->bandwidth_up); in batadv_gw_node_update()
530 hlist_del_init_rcu(&gw_node->list); in batadv_gw_node_update()
533 batadv_gw_node_free_ref(gw_node); in batadv_gw_node_update()
536 if (gw_node == curr_gw) in batadv_gw_node_update()
544 if (gw_node) in batadv_gw_node_update()
545 batadv_gw_node_free_ref(gw_node); in batadv_gw_node_update()
561 struct batadv_gw_node *gw_node; in batadv_gw_node_free() local
565 hlist_for_each_entry_safe(gw_node, node_tmp, in batadv_gw_node_free()
567 hlist_del_init_rcu(&gw_node->list); in batadv_gw_node_free()
568 batadv_gw_node_free_ref(gw_node); in batadv_gw_node_free()
576 const struct batadv_gw_node *gw_node) in batadv_write_buffer_text() argument
583 router = batadv_orig_router_get(gw_node->orig_node, BATADV_IF_DEFAULT); in batadv_write_buffer_text()
594 (curr_gw == gw_node ? "=>" : " "), in batadv_write_buffer_text()
595 gw_node->orig_node->orig, in batadv_write_buffer_text()
598 gw_node->bandwidth_down / 10, in batadv_write_buffer_text()
599 gw_node->bandwidth_down % 10, in batadv_write_buffer_text()
600 gw_node->bandwidth_up / 10, in batadv_write_buffer_text()
601 gw_node->bandwidth_up % 10); in batadv_write_buffer_text()
619 struct batadv_gw_node *gw_node; in batadv_gw_client_seq_print_text() local
633 hlist_for_each_entry_rcu(gw_node, &bat_priv->gw.list, list) { in batadv_gw_client_seq_print_text()
635 if (batadv_write_buffer_text(bat_priv, seq, gw_node) < 0) in batadv_gw_client_seq_print_text()
791 struct batadv_gw_node *gw_node = NULL; in batadv_gw_out_of_range() local
806 gw_node = batadv_gw_node_get(bat_priv, orig_dst_node); in batadv_gw_out_of_range()
807 if (!gw_node) in batadv_gw_out_of_range()
866 if (gw_node) in batadv_gw_out_of_range()
867 batadv_gw_node_free_ref(gw_node); in batadv_gw_out_of_range()