batman-adv: convert orig_node->vlan_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>
This commit is contained in:
parent
2bdd1888f1
commit
d0fa4f3f5b
@ -26,6 +26,7 @@
|
||||
#include <linux/list.h>
|
||||
#include <linux/lockdep.h>
|
||||
#include <linux/netdevice.h>
|
||||
#include <linux/rculist.h>
|
||||
#include <linux/seq_file.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/spinlock.h>
|
||||
@ -70,7 +71,7 @@ batadv_orig_node_vlan_get(struct batadv_orig_node *orig_node,
|
||||
struct batadv_orig_node_vlan *vlan = NULL, *tmp;
|
||||
|
||||
rcu_read_lock();
|
||||
list_for_each_entry_rcu(tmp, &orig_node->vlan_list, list) {
|
||||
hlist_for_each_entry_rcu(tmp, &orig_node->vlan_list, list) {
|
||||
if (tmp->vid != vid)
|
||||
continue;
|
||||
|
||||
@ -118,7 +119,7 @@ batadv_orig_node_vlan_new(struct batadv_orig_node *orig_node,
|
||||
atomic_set(&vlan->refcount, 2);
|
||||
vlan->vid = vid;
|
||||
|
||||
list_add_rcu(&vlan->list, &orig_node->vlan_list);
|
||||
hlist_add_head_rcu(&vlan->list, &orig_node->vlan_list);
|
||||
|
||||
out:
|
||||
spin_unlock_bh(&orig_node->vlan_list_lock);
|
||||
@ -673,7 +674,7 @@ struct batadv_orig_node *batadv_orig_node_new(struct batadv_priv *bat_priv,
|
||||
return NULL;
|
||||
|
||||
INIT_HLIST_HEAD(&orig_node->neigh_list);
|
||||
INIT_LIST_HEAD(&orig_node->vlan_list);
|
||||
INIT_HLIST_HEAD(&orig_node->vlan_list);
|
||||
INIT_HLIST_HEAD(&orig_node->ifinfo_list);
|
||||
spin_lock_init(&orig_node->bcast_seqno_lock);
|
||||
spin_lock_init(&orig_node->neigh_list_lock);
|
||||
|
@ -315,7 +315,7 @@ static void batadv_tt_global_size_mod(struct batadv_orig_node *orig_node,
|
||||
|
||||
if (atomic_add_return(v, &vlan->tt.num_entries) == 0) {
|
||||
spin_lock_bh(&orig_node->vlan_list_lock);
|
||||
list_del_rcu(&vlan->list);
|
||||
hlist_del_rcu(&vlan->list);
|
||||
spin_unlock_bh(&orig_node->vlan_list_lock);
|
||||
batadv_orig_node_vlan_free_ref(vlan);
|
||||
}
|
||||
@ -741,7 +741,7 @@ batadv_tt_prepare_tvlv_global_data(struct batadv_orig_node *orig_node,
|
||||
u8 *tt_change_ptr;
|
||||
|
||||
rcu_read_lock();
|
||||
list_for_each_entry_rcu(vlan, &orig_node->vlan_list, list) {
|
||||
hlist_for_each_entry_rcu(vlan, &orig_node->vlan_list, list) {
|
||||
num_vlan++;
|
||||
num_entries += atomic_read(&vlan->tt.num_entries);
|
||||
}
|
||||
@ -767,7 +767,7 @@ batadv_tt_prepare_tvlv_global_data(struct batadv_orig_node *orig_node,
|
||||
(*tt_data)->num_vlan = htons(num_vlan);
|
||||
|
||||
tt_vlan = (struct batadv_tvlv_tt_vlan_data *)(*tt_data + 1);
|
||||
list_for_each_entry_rcu(vlan, &orig_node->vlan_list, list) {
|
||||
hlist_for_each_entry_rcu(vlan, &orig_node->vlan_list, list) {
|
||||
tt_vlan->vid = htons(vlan->vid);
|
||||
tt_vlan->crc = htonl(vlan->tt.crc);
|
||||
|
||||
@ -2466,7 +2466,7 @@ static void batadv_tt_global_update_crc(struct batadv_priv *bat_priv,
|
||||
|
||||
/* recompute the global CRC for each VLAN */
|
||||
rcu_read_lock();
|
||||
list_for_each_entry_rcu(vlan, &orig_node->vlan_list, list) {
|
||||
hlist_for_each_entry_rcu(vlan, &orig_node->vlan_list, list) {
|
||||
/* if orig_node is a backbone node for this VLAN, don't compute
|
||||
* the CRC as we ignore all the global entries over it
|
||||
*/
|
||||
|
@ -190,7 +190,7 @@ struct batadv_vlan_tt {
|
||||
struct batadv_orig_node_vlan {
|
||||
unsigned short vid;
|
||||
struct batadv_vlan_tt tt;
|
||||
struct list_head list;
|
||||
struct hlist_node list;
|
||||
atomic_t refcount;
|
||||
struct rcu_head rcu;
|
||||
};
|
||||
@ -302,7 +302,7 @@ struct batadv_orig_node {
|
||||
spinlock_t out_coding_list_lock; /* Protects out_coding_list */
|
||||
#endif
|
||||
struct batadv_frag_table_entry fragments[BATADV_FRAG_BUFFER_COUNT];
|
||||
struct list_head vlan_list;
|
||||
struct hlist_head vlan_list;
|
||||
spinlock_t vlan_list_lock; /* protects vlan_list */
|
||||
struct batadv_orig_bat_iv bat_iv;
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user