Commit 7c26a53ba5e7e4bf2be3cb93f2fffaefccff2e3b

Authored by Marek Lindner
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 /**