Hi, Patch converts /proc/net/rt6_stats to use seq_file. Builds and boots on P4/SMP. Please apply to 2.5.69. Thanks, -- ~Randy patch_name: rt6stats_seqfile.patch patch_version: 2003-05-06.12:47:21 author: Randy.Dunlap <rddunlap@osdl.org> description: convert /proc/net/rt6_stats to use seq_file for output; product: Linux product_versions: 2.5.69 maintainer: davem@redhat.com diffstat: = net/ipv6/route.c | 36 +++++++++++++++++++++--------------- 1 files changed, 21 insertions(+), 15 deletions(-) diff -Naur ./net/ipv6/route.c%SEQF ./net/ipv6/route.c --- ./net/ipv6/route.c%SEQF 2003-05-04 16:53:36.000000000 -0700 +++ ./net/ipv6/route.c 2003-05-06 12:42:45.000000000 -0700 @@ -39,6 +39,7 @@ #ifdef CONFIG_PROC_FS #include <linux/proc_fs.h> +#include <linux/seq_file.h> #endif #include <net/snmp.h> @@ -1751,27 +1752,28 @@ extern struct rt6_statistics rt6_stats; -static int rt6_proc_stats(char *buffer, char **start, off_t offset, int length) +static int rt6_stats_seq_show(struct seq_file *seq, void *v) { - int len; - - len = sprintf(buffer, "%04x %04x %04x %04x %04x %04x\n", + seq_printf(seq, "%04x %04x %04x %04x %04x %04x\n", rt6_stats.fib_nodes, rt6_stats.fib_route_nodes, rt6_stats.fib_rt_alloc, rt6_stats.fib_rt_entries, rt6_stats.fib_rt_cache, atomic_read(&ip6_dst_ops.entries)); - len -= offset; - - if (len > length) - len = length; - if(len < 0) - len = 0; - - *start = buffer + offset; + return 0; +} - return len; +static int rt6_stats_seq_open(struct inode *inode, struct file *file) +{ + return single_open(file, rt6_stats_seq_show, NULL); } + +static struct file_operations rt6_stats_seq_fops = { + .open = rt6_stats_seq_open, + .read = seq_read, + .llseek = seq_lseek, + .release = single_release, +}; #endif /* CONFIG_PROC_FS */ #ifdef CONFIG_SYSCTL @@ -1877,6 +1879,8 @@ void __init ip6_route_init(void) { + struct proc_dir_entry *p; + ip6_dst_ops.kmem_cachep = kmem_cache_create("ip6_dst_cache", sizeof(struct rt6_info), 0, SLAB_HWCACHE_ALIGN, @@ -1884,7 +1888,9 @@ fib6_init(); #ifdef CONFIG_PROC_FS proc_net_create("ipv6_route", 0, rt6_proc_info); - proc_net_create("rt6_stats", 0, rt6_proc_stats); + p = create_proc_entry("rt6_stats", S_IRUGO, proc_net); + if (p) + p->proc_fops = &rt6_stats_seq_fops; #endif xfrm6_init(); } @@ -1894,7 +1900,7 @@ { #ifdef CONFIG_PROC_FS proc_net_remove("ipv6_route"); - proc_net_remove("rt6_stats"); + remove_proc_entry("rt6_stats", proc_net); #endif xfrm6_fini(); rt6_ifdown(NULL); - : send the line "unsubscribe linux-net" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html