Cosmetic comment: I forgot to say there are a few indentation "errors" when I apply your patch. See below.
Benjamin Thery wrote: > Alexey Dobriyan wrote: >> One proc_net_create() user less. > > Funny, I was working on a similar patch. > > See comment below. > > >> Signed-off-by: Alexey Dobriyan <[EMAIL PROTECTED]> >> --- >> >> net/ipv6/route.c | 70 >> +++++++++++++++++++------------------------------------ >> 1 file changed, 25 insertions(+), 45 deletions(-) >> >> --- a/net/ipv6/route.c >> +++ b/net/ipv6/route.c >> @@ -2288,71 +2288,49 @@ struct rt6_proc_arg >> >> static int rt6_info_route(struct rt6_info *rt, void *p_arg) >> { >> - struct rt6_proc_arg *arg = (struct rt6_proc_arg *) p_arg; >> + struct seq_file *m = p_arg; >> >> - if (arg->skip < arg->offset / RT6_INFO_LEN) { >> - arg->skip++; >> - return 0; >> - } >> - >> - if (arg->len >= arg->length) >> - return 0; >> - >> - arg->len += sprintf(arg->buffer + arg->len, >> - NIP6_SEQFMT " %02x ", >> - NIP6(rt->rt6i_dst.addr), >> + seq_printf(m, NIP6_SEQFMT " %02x ", NIP6(rt->rt6i_dst.addr), >> rt->rt6i_dst.plen); >> >> #ifdef CONFIG_IPV6_SUBTREES >> - arg->len += sprintf(arg->buffer + arg->len, >> - NIP6_SEQFMT " %02x ", >> - NIP6(rt->rt6i_src.addr), >> + seq_printf(m, NIP6_SEQFMT " %02x ", NIP6(rt->rt6i_src.addr), >> rt->rt6i_src.plen); Indent is wrong for the above line. >> #else >> - arg->len += sprintf(arg->buffer + arg->len, >> - "00000000000000000000000000000000 00 "); >> + seq_puts(m, "00000000000000000000000000000000 00 "); >> #endif >> >> if (rt->rt6i_nexthop) { >> - arg->len += sprintf(arg->buffer + arg->len, >> - NIP6_SEQFMT, >> + seq_printf(m, NIP6_SEQFMT, >> NIP6(*((struct in6_addr >> *)rt->rt6i_nexthop->primary_key))); Idem. >> } else { >> - arg->len += sprintf(arg->buffer + arg->len, >> - "00000000000000000000000000000000"); >> + seq_puts(m, "00000000000000000000000000000000"); >> } >> - arg->len += sprintf(arg->buffer + arg->len, >> - " %08x %08x %08x %08x %8s\n", >> + seq_printf(m, " %08x %08x %08x %08x %8s\n", >> rt->rt6i_metric, atomic_read(&rt->u.dst.__refcnt), >> rt->u.dst.__use, rt->rt6i_flags, >> rt->rt6i_dev ? rt->rt6i_dev->name : ""); Indent of the 3 above lines. >> return 0; >> } >> >> -static int rt6_proc_info(char *buffer, char **start, off_t offset, int >> length) >> +static int ipv6_route_show(struct seq_file *m, void *v) >> { >> - struct rt6_proc_arg arg = { >> - .buffer = buffer, >> - .offset = offset, >> - .length = length, >> - }; >> - >> - fib6_clean_all(rt6_info_route, 0, &arg); >> - >> - *start = buffer; >> - if (offset) >> - *start += offset % RT6_INFO_LEN; >> - >> - arg.len -= offset % RT6_INFO_LEN; >> - >> - if (arg.len > length) >> - arg.len = length; >> - if (arg.len < 0) >> - arg.len = 0; >> + fib6_clean_all(rt6_info_route, 0, m); >> + return 0; >> +} >> >> - return arg.len; >> +static int ipv6_route_open(struct inode *inode, struct file *file) >> +{ >> + return single_open(file, ipv6_route_show, NULL); >> } >> >> +static const struct file_operations ipv6_route_proc_fops = { >> + .open = ipv6_route_open, >> + .read = seq_read, >> + .llseek = seq_lseek, >> + .release = single_release, >> +}; >> + >> static int rt6_stats_seq_show(struct seq_file *seq, void *v) >> { >> seq_printf(seq, "%04x %04x %04x %04x %04x %04x %04x\n", >> @@ -2499,9 +2477,11 @@ void __init ip6_route_init(void) >> >> fib6_init(); >> #ifdef CONFIG_PROC_FS >> - p = proc_net_create(&init_net, "ipv6_route", 0, rt6_proc_info); >> - if (p) > >> + p = create_proc_entry("ipv6_route", 0, init_net.proc_net); >> + if (p) { >> p->owner = THIS_MODULE; >> + p->proc_fops = &ipv6_route_proc_fops; >> + } > > You should use proc_net_fops_create() instead of the above code. > It does the same thing. > > Otherwise the patch looks fine to me. > Tested on i386. > > Benjamin > >> proc_net_fops_create(&init_net, "rt6_stats", S_IRUGO, >> &rt6_stats_seq_fops); >> #endif >> >> - >> To unsubscribe from this list: send the line "unsubscribe netdev" in >> the body of a message to [EMAIL PROTECTED] >> More majordomo info at http://vger.kernel.org/majordomo-info.html >> > > -- B e n j a m i n T h e r y - BULL/DT/Open Software R&D http://www.bull.com - To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html