ipv4: fib_trie remove unused argument
Subsystems (3)
PATCH 1/2 ipv4: fib_trie remove unused argument
The trie pointer is passed down to flush_list and flush_leaf but never used.
net/ipv4/fib_trie.c +4 -4
@@ -1665,7 +1665,7 @@ static int fn_trie_delete(struct fib_tabreturn 0 ; } -static int trie_flush_list (struct trie *t,struct list_head *head) +static int trie_flush_list (struct list_head *head) {struct fib_alias *fa, *fa_node;int found =0 ;
@@ -1683,7 +1683,7 @@ static int trie_flush_list(struct trie *return found; } -static int trie_flush_leaf (struct trie *t,struct leaf *l) +static int trie_flush_leaf (struct leaf *l) {int found =0 ;struct hlist_head *lih = &l->list;
@@ -1691,7 +1691,7 @@ static int trie_flush_leaf(struct trie *struct leaf_info *li =NULL ;hlist_for_each_entry_safe (li, node, tmp, lih, hlist) { - found +=trie_flush_list (t, &li->falh); + found +=trie_flush_list (&li->falh);if (list_empty (&li->falh)) {hlist_del_rcu (&li->hlist);
@@ -1782,7 +1782,7 @@ static int fn_trie_flush(struct fib_tablint found =0 ;for (l =trie_firstleaf (t); l; l =trie_nextleaf (l)) { - found +=trie_flush_leaf (t, l); + found +=trie_flush_leaf (l);if (ll &&hlist_empty (&ll->list))trie_leaf_remove (t, ll);
PATCH 2/2 ipv4: fib_trie leaf free optimization
Avoid unneeded test in the case where object to be freed has to be a leaf. Don't need to use the generic tnode_free() function, instead just setup leaf to be freed.
net/ipv4/fib_trie.c +11 -8
@@ -160,7 +160,6 @@ static void tnode_put_child_reorg(structstatic struct node *resize (struct trie *t,struct tnode *tn);static struct tnode *inflate (struct trie *t,struct tnode *tn);static struct tnode *halve (struct trie *t,struct tnode *tn); -static void tnode_free (struct tnode *tn);static struct kmem_cache *fn_alias_kmem__read_mostly ;static struct kmem_cache *trie_leaf_kmem__read_mostly ;
@@ -334,6 +333,11 @@ static void __leaf_free_rcu(struct rcu_hkmem_cache_free (trie_leaf_kmem, l); } +static inline void free_leaf (struct leaf *l) +{ +call_rcu_bh (&l->rcu, __leaf_free_rcu); +} +static void __leaf_info_free_rcu (struct rcu_head *head) {kfree (container_of(head ,struct leaf_info ,rcu ));
@@ -372,10 +376,9 @@ static void __tnode_free_rcu(struct rcu_static inline void tnode_free (struct tnode *tn) { -if (IS_LEAF (tn)) { -struct leaf *l = (struct leaf *) tn; -call_rcu_bh (&l->rcu, __leaf_free_rcu); - }else +if (IS_LEAF (tn)) +free_leaf ((struct leaf *) tn); +else call_rcu (&tn->rcu, __tnode_free_rcu); }
@@ -1086,7 +1089,7 @@ static struct list_head *fib_insert_node li =leaf_info_new (plen);if (!li) { -tnode_free ((struct tnode *) l); +free_leaf (l);return NULL ; }
@@ -1122,7 +1125,7 @@ static struct list_head *fib_insert_nodeif (!tn) {free_leaf_info (li); -tnode_free ((struct tnode *) l); +free_leaf (l);return NULL ; }
@@ -1578,7 +1581,7 @@ static void trie_leaf_remove(struct trie }else rcu_assign_pointer (t->trie,NULL ); -tnode_free ((struct tnode *) l); +free_leaf (l); }/*
Re: [PATCH 2/2] ipv4: fib_trie leaf free optimization
From: Stephen Hemminger <[email protected]>
Date: Wed, 2 Apr 2008 21:58:59 -0700
Quoted 5 lines
Avoid unneeded test in the case where object to be freed has to be a leaf. Don't need to use the generic
tnode_free()function, instead just setup leaf to be freed.Signed-off-by Stephen Hemminger <[email protected]>
Applied, thanks.
From: Stephen Hemminger <[email protected]>
Date: Wed, 2 Apr 2008 21:57:24 -0700
Quoted 4 lines
The trie pointer is passed down to
flush_listandflush_leafbut never used.Signed-off-by Stephen Hemminger <[email protected]>
Applied, thanks.