aboutsummaryrefslogtreecommitdiffstats
path: root/net/batman-adv/translation-table.c
diff options
context:
space:
mode:
authorAntonio Quartulli <antonio@open-mesh.com>2013-10-12 20:50:18 -0400
committerAntonio Quartulli <antonio@meshcoding.com>2013-10-23 11:03:44 -0400
commit0c69aecc5b1a57d62c39cf8c552a9e823409db60 (patch)
tree7e4fe1bdec04e8fec9b3b7c802bfa17be0c05782 /net/batman-adv/translation-table.c
parent8257f55ae277dd94c015f7cf32f4afd1db59fe8d (diff)
batman-adv: invoke dev_get_by_index() outside of is_wifi_iface()
Upcoming changes need to perform other checks on the incoming net_device struct. To avoid performing dev_get_by_index() for each and every check, it is better to move it outside of is_wifi_iface() and search the netdev object once only. Signed-off-by: Antonio Quartulli <antonio@open-mesh.com> Signed-off-by: Marek Lindner <mareklindner@neomailbox.ch>
Diffstat (limited to 'net/batman-adv/translation-table.c')
-rw-r--r--net/batman-adv/translation-table.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/net/batman-adv/translation-table.c b/net/batman-adv/translation-table.c
index a3c965dd1d96..b0fe177956ef 100644
--- a/net/batman-adv/translation-table.c
+++ b/net/batman-adv/translation-table.c
@@ -477,11 +477,15 @@ bool batadv_tt_local_add(struct net_device *soft_iface, const uint8_t *addr,
477 struct batadv_priv *bat_priv = netdev_priv(soft_iface); 477 struct batadv_priv *bat_priv = netdev_priv(soft_iface);
478 struct batadv_tt_local_entry *tt_local; 478 struct batadv_tt_local_entry *tt_local;
479 struct batadv_tt_global_entry *tt_global; 479 struct batadv_tt_global_entry *tt_global;
480 struct net_device *in_dev = NULL;
480 struct hlist_head *head; 481 struct hlist_head *head;
481 struct batadv_tt_orig_list_entry *orig_entry; 482 struct batadv_tt_orig_list_entry *orig_entry;
482 int hash_added, table_size, packet_size_max; 483 int hash_added, table_size, packet_size_max;
483 bool ret = false, roamed_back = false; 484 bool ret = false, roamed_back = false;
484 485
486 if (ifindex != BATADV_NULL_IFINDEX)
487 in_dev = dev_get_by_index(&init_net, ifindex);
488
485 tt_local = batadv_tt_local_hash_find(bat_priv, addr, vid); 489 tt_local = batadv_tt_local_hash_find(bat_priv, addr, vid);
486 tt_global = batadv_tt_global_hash_find(bat_priv, addr, vid); 490 tt_global = batadv_tt_global_hash_find(bat_priv, addr, vid);
487 491
@@ -542,7 +546,7 @@ bool batadv_tt_local_add(struct net_device *soft_iface, const uint8_t *addr,
542 */ 546 */
543 tt_local->common.flags = BATADV_TT_CLIENT_NEW; 547 tt_local->common.flags = BATADV_TT_CLIENT_NEW;
544 tt_local->common.vid = vid; 548 tt_local->common.vid = vid;
545 if (batadv_is_wifi_iface(ifindex)) 549 if (batadv_is_wifi_netdev(in_dev))
546 tt_local->common.flags |= BATADV_TT_CLIENT_WIFI; 550 tt_local->common.flags |= BATADV_TT_CLIENT_WIFI;
547 atomic_set(&tt_local->common.refcount, 2); 551 atomic_set(&tt_local->common.refcount, 2);
548 tt_local->last_seen = jiffies; 552 tt_local->last_seen = jiffies;
@@ -595,6 +599,8 @@ check_roaming:
595 ret = true; 599 ret = true;
596 600
597out: 601out:
602 if (in_dev)
603 dev_put(in_dev);
598 if (tt_local) 604 if (tt_local)
599 batadv_tt_local_entry_free_ref(tt_local); 605 batadv_tt_local_entry_free_ref(tt_local);
600 if (tt_global) 606 if (tt_global)