Commit 7c26a53ba5e7e4bf2be3cb93f2fffaefccff2e3b
Committed by
Antonio Quartulli
1 parent
0b8336f5fc
batman-adv: convert bat_priv->tt.req_list to hlist
Since the list's tail is never accessed using a double linked list head wastes memory. Signed-off-by: Marek Lindner <mareklindner@neomailbox.ch> Signed-off-by: Antonio Quartulli <antonio@meshcoding.com>
Showing 3 changed files with 19 additions and 16 deletions Side-by-side Diff
net/batman-adv/main.c
... | ... | @@ -148,7 +148,7 @@ |
148 | 148 | INIT_HLIST_HEAD(&bat_priv->mcast.want_all_ipv6_list); |
149 | 149 | #endif |
150 | 150 | INIT_LIST_HEAD(&bat_priv->tt.changes_list); |
151 | - INIT_LIST_HEAD(&bat_priv->tt.req_list); | |
151 | + INIT_HLIST_HEAD(&bat_priv->tt.req_list); | |
152 | 152 | INIT_LIST_HEAD(&bat_priv->tt.roam_list); |
153 | 153 | #ifdef CONFIG_BATMAN_ADV_MCAST |
154 | 154 | INIT_HLIST_HEAD(&bat_priv->mcast.mla_list); |
net/batman-adv/translation-table.c
... | ... | @@ -2224,12 +2224,13 @@ |
2224 | 2224 | |
2225 | 2225 | static void batadv_tt_req_list_free(struct batadv_priv *bat_priv) |
2226 | 2226 | { |
2227 | - struct batadv_tt_req_node *node, *safe; | |
2227 | + struct batadv_tt_req_node *node; | |
2228 | + struct hlist_node *safe; | |
2228 | 2229 | |
2229 | 2230 | spin_lock_bh(&bat_priv->tt.req_list_lock); |
2230 | 2231 | |
2231 | - list_for_each_entry_safe(node, safe, &bat_priv->tt.req_list, list) { | |
2232 | - list_del_init(&node->list); | |
2232 | + hlist_for_each_entry_safe(node, safe, &bat_priv->tt.req_list, list) { | |
2233 | + hlist_del_init(&node->list); | |
2233 | 2234 | kfree(node); |
2234 | 2235 | } |
2235 | 2236 | |
2236 | 2237 | |
2237 | 2238 | |
... | ... | @@ -2259,13 +2260,14 @@ |
2259 | 2260 | |
2260 | 2261 | static void batadv_tt_req_purge(struct batadv_priv *bat_priv) |
2261 | 2262 | { |
2262 | - struct batadv_tt_req_node *node, *safe; | |
2263 | + struct batadv_tt_req_node *node; | |
2264 | + struct hlist_node *safe; | |
2263 | 2265 | |
2264 | 2266 | spin_lock_bh(&bat_priv->tt.req_list_lock); |
2265 | - list_for_each_entry_safe(node, safe, &bat_priv->tt.req_list, list) { | |
2267 | + hlist_for_each_entry_safe(node, safe, &bat_priv->tt.req_list, list) { | |
2266 | 2268 | if (batadv_has_timed_out(node->issued_at, |
2267 | 2269 | BATADV_TT_REQUEST_TIMEOUT)) { |
2268 | - list_del_init(&node->list); | |
2270 | + hlist_del_init(&node->list); | |
2269 | 2271 | kfree(node); |
2270 | 2272 | } |
2271 | 2273 | } |
... | ... | @@ -2287,7 +2289,7 @@ |
2287 | 2289 | struct batadv_tt_req_node *tt_req_node_tmp, *tt_req_node = NULL; |
2288 | 2290 | |
2289 | 2291 | spin_lock_bh(&bat_priv->tt.req_list_lock); |
2290 | - list_for_each_entry(tt_req_node_tmp, &bat_priv->tt.req_list, list) { | |
2292 | + hlist_for_each_entry(tt_req_node_tmp, &bat_priv->tt.req_list, list) { | |
2291 | 2293 | if (batadv_compare_eth(tt_req_node_tmp, orig_node) && |
2292 | 2294 | !batadv_has_timed_out(tt_req_node_tmp->issued_at, |
2293 | 2295 | BATADV_TT_REQUEST_TIMEOUT)) |
... | ... | @@ -2301,7 +2303,7 @@ |
2301 | 2303 | ether_addr_copy(tt_req_node->addr, orig_node->orig); |
2302 | 2304 | tt_req_node->issued_at = jiffies; |
2303 | 2305 | |
2304 | - list_add(&tt_req_node->list, &bat_priv->tt.req_list); | |
2306 | + hlist_add_head(&tt_req_node->list, &bat_priv->tt.req_list); | |
2305 | 2307 | unlock: |
2306 | 2308 | spin_unlock_bh(&bat_priv->tt.req_list_lock); |
2307 | 2309 | return tt_req_node; |
... | ... | @@ -2552,8 +2554,8 @@ |
2552 | 2554 | batadv_hardif_free_ref(primary_if); |
2553 | 2555 | if (ret && tt_req_node) { |
2554 | 2556 | spin_lock_bh(&bat_priv->tt.req_list_lock); |
2555 | - /* list_del_init() verifies tt_req_node still is in the list */ | |
2556 | - list_del_init(&tt_req_node->list); | |
2557 | + /* hlist_del_init() verifies tt_req_node still is in the list */ | |
2558 | + hlist_del_init(&tt_req_node->list); | |
2557 | 2559 | spin_unlock_bh(&bat_priv->tt.req_list_lock); |
2558 | 2560 | kfree(tt_req_node); |
2559 | 2561 | } |
... | ... | @@ -2949,7 +2951,8 @@ |
2949 | 2951 | struct batadv_tvlv_tt_data *tt_data, |
2950 | 2952 | u8 *resp_src, u16 num_entries) |
2951 | 2953 | { |
2952 | - struct batadv_tt_req_node *node, *safe; | |
2954 | + struct batadv_tt_req_node *node; | |
2955 | + struct hlist_node *safe; | |
2953 | 2956 | struct batadv_orig_node *orig_node = NULL; |
2954 | 2957 | struct batadv_tvlv_tt_change *tt_change; |
2955 | 2958 | u8 *tvlv_ptr = (u8 *)tt_data; |
2956 | 2959 | |
... | ... | @@ -2987,10 +2990,10 @@ |
2987 | 2990 | |
2988 | 2991 | /* Delete the tt_req_node from pending tt_requests list */ |
2989 | 2992 | spin_lock_bh(&bat_priv->tt.req_list_lock); |
2990 | - list_for_each_entry_safe(node, safe, &bat_priv->tt.req_list, list) { | |
2993 | + hlist_for_each_entry_safe(node, safe, &bat_priv->tt.req_list, list) { | |
2991 | 2994 | if (!batadv_compare_eth(node->addr, resp_src)) |
2992 | 2995 | continue; |
2993 | - list_del_init(&node->list); | |
2996 | + hlist_del_init(&node->list); | |
2994 | 2997 | kfree(node); |
2995 | 2998 | } |
2996 | 2999 |
net/batman-adv/types.h
... | ... | @@ -537,7 +537,7 @@ |
537 | 537 | struct list_head changes_list; |
538 | 538 | struct batadv_hashtable *local_hash; |
539 | 539 | struct batadv_hashtable *global_hash; |
540 | - struct list_head req_list; | |
540 | + struct hlist_head req_list; | |
541 | 541 | struct list_head roam_list; |
542 | 542 | spinlock_t changes_list_lock; /* protects changes */ |
543 | 543 | spinlock_t req_list_lock; /* protects req_list */ |
... | ... | @@ -1006,7 +1006,7 @@ |
1006 | 1006 | struct batadv_tt_req_node { |
1007 | 1007 | u8 addr[ETH_ALEN]; |
1008 | 1008 | unsigned long issued_at; |
1009 | - struct list_head list; | |
1009 | + struct hlist_node list; | |
1010 | 1010 | }; |
1011 | 1011 | |
1012 | 1012 | /** |