ipv6: avoid high order memory allocations for /proc/net/ipv6_route
Dumping routes on a system with lots rt6_infos in the fibs causes up to 11-order allocations in seq_file (which fail). While we could switch there to vmalloc we could just implement the streaming interface for /proc/net/ipv6_route. This patch switches /proc/net/ipv6_route from single_open_net to seq_open_net. loff_t *pos tracks dst entries. Also kill never used struct rt6_proc_arg and now unused function fib6_clean_all_ro. Cc: Ben Greear <greearb@candelatech.com> Cc: Patrick McHardy <kaber@trash.net> Cc: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org> Signed-off-by: Hannes Frederic Sowa <hannes@stressinduktion.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
6229ed1f22
commit
8d2ca1d7b5
@@ -280,10 +280,6 @@ struct fib6_node *fib6_locate(struct fib6_node *root,
|
||||
const struct in6_addr *daddr, int dst_len,
|
||||
const struct in6_addr *saddr, int src_len);
|
||||
|
||||
void fib6_clean_all_ro(struct net *net,
|
||||
int (*func)(struct rt6_info *, void *arg),
|
||||
int prune, void *arg);
|
||||
|
||||
void fib6_clean_all(struct net *net, int (*func)(struct rt6_info *, void *arg),
|
||||
int prune, void *arg);
|
||||
|
||||
@@ -299,6 +295,8 @@ void fib6_gc_cleanup(void);
|
||||
|
||||
int fib6_init(void);
|
||||
|
||||
int ipv6_route_open(struct inode *inode, struct file *file);
|
||||
|
||||
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
|
||||
int fib6_rules_init(void);
|
||||
void fib6_rules_cleanup(void);
|
||||
|
Reference in New Issue
Block a user