neigh: optimize neigh_parms_release()
In neigh_parms_release() we loop over all entries to find the entry given in argument and being able to remove it from the list. By using a double linked list, we can avoid this loop. Here are some numbers with 30 000 dummy interfaces configured: Before the patch: $ time rmmod dummy real 2m0.118s user 0m0.000s sys 1m50.048s After the patch: $ time rmmod dummy real 1m9.970s user 0m0.000s sys 0m47.976s Suggested-by: Thierry Herbelot <thierry.herbelot@6wind.com> Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com> Acked-by: Eric Dumazet <edumazet@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
bc9ad166e3
commit
75fbfd3323
@@ -69,7 +69,7 @@ struct neigh_parms {
|
||||
struct net *net;
|
||||
#endif
|
||||
struct net_device *dev;
|
||||
struct neigh_parms *next;
|
||||
struct list_head list;
|
||||
int (*neigh_setup)(struct neighbour *);
|
||||
void (*neigh_cleanup)(struct neighbour *);
|
||||
struct neigh_table *tbl;
|
||||
@@ -203,6 +203,7 @@ struct neigh_table {
|
||||
void (*proxy_redo)(struct sk_buff *skb);
|
||||
char *id;
|
||||
struct neigh_parms parms;
|
||||
struct list_head parms_list;
|
||||
int gc_interval;
|
||||
int gc_thresh1;
|
||||
int gc_thresh2;
|
||||
|
Reference in New Issue
Block a user