diff options
author | Antonio Quartulli <antonio@open-mesh.com> | 2013-10-12 20:50:18 -0400 |
---|---|---|
committer | Antonio Quartulli <antonio@meshcoding.com> | 2013-10-23 11:03:44 -0400 |
commit | 0c69aecc5b1a57d62c39cf8c552a9e823409db60 (patch) | |
tree | 7e4fe1bdec04e8fec9b3b7c802bfa17be0c05782 /net/batman-adv/translation-table.c | |
parent | 8257f55ae277dd94c015f7cf32f4afd1db59fe8d (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.c | 8 |
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 | ||
597 | out: | 601 | out: |
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) |