Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756383AbZFSKAx (ORCPT ); Fri, 19 Jun 2009 06:00:53 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1753942AbZFSKAq (ORCPT ); Fri, 19 Jun 2009 06:00:46 -0400 Received: from mail.windriver.com ([147.11.1.11]:63532 "EHLO mail.wrs.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753134AbZFSKAp (ORCPT ); Fri, 19 Jun 2009 06:00:45 -0400 Message-ID: <4A3B5CD7.3050601@windriver.com> Date: Fri, 19 Jun 2009 17:39:35 +0800 From: Wang Liming User-Agent: Thunderbird 2.0.0.21 (Windows/20090302) MIME-Version: 1.0 To: Li Zefan CC: Steven Rostedt , Ingo Molnar , Frederic Weisbecker , LKML Subject: Re: [PATCH 2/5] tracing_bprintk: don't increment @pos in t_start() References: <4A3B3372.4040608@cn.fujitsu.com> <4A3B3445.2050005@cn.fujitsu.com> In-Reply-To: <4A3B3445.2050005@cn.fujitsu.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-OriginalArrivalTime: 19 Jun 2009 10:00:35.0496 (UTC) FILETIME=[CA4B5280:01C9F0C4] Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2911 Lines: 104 Hi, Li Zefan wrote: > It's wrong to increment @pos in t_start(), otherwise we'll lose > some entries when reading printk_formats, if the output is large > than PAGE_SIZE. > > [ Impact: fix missing entries when reading printk_formats ] > > Reported-by: Lai Jiangshan > Signed-off-by: Li Zefan > --- > kernel/trace/trace_printk.c | 26 ++++++-------------------- > 1 files changed, 6 insertions(+), 20 deletions(-) > > diff --git a/kernel/trace/trace_printk.c b/kernel/trace/trace_printk.c > index 9bece96..7b62781 100644 > --- a/kernel/trace/trace_printk.c > +++ b/kernel/trace/trace_printk.c > @@ -155,25 +155,19 @@ int __ftrace_vprintk(unsigned long ip, const char *fmt, va_list ap) > EXPORT_SYMBOL_GPL(__ftrace_vprintk); > > static void * > -t_next(struct seq_file *m, void *v, loff_t *pos) > +t_start(struct seq_file *m, loff_t *pos) > { > - const char **fmt = m->private; > - const char **next = fmt; > - > - (*pos)++; > + const char **fmt = __start___trace_bprintk_fmt + *pos; > > if ((unsigned long)fmt >= (unsigned long)__stop___trace_bprintk_fmt) > return NULL; > - > - next = fmt; > - m->private = ++next; > - > return fmt; > } > > -static void *t_start(struct seq_file *m, loff_t *pos) > +static void *t_next(struct seq_file *m, void * v, loff_t *pos) > { > - return t_next(m, NULL, pos); > + (*pos)++; > + return t_start(m, pos); > } > I prefer to .start to call .next, so I rewrite it to following: @@ -157,17 +157,15 @@ EXPORT_SYMBOL_GPL(__ftrace_vprintk); static void * t_next(struct seq_file *m, void *v, loff_t *pos) { - const char **fmt = m->private; - const char **next = fmt; + const char **fmt; - (*pos)++; + if (v) + (*pos)++; + fmt = __start___trace_bprintk_fmt + *pos; if ((unsigned long)fmt >= (unsigned long)__stop___trace_bprintk_fmt) return NULL; - next = fmt; - m->private = ++next; - return fmt; } but I have not tested it, if you have no objection, then: Signed-off-by: walimis Liming Wang > static int t_show(struct seq_file *m, void *v) > @@ -224,15 +218,7 @@ static const struct seq_operations show_format_seq_ops = { > static int > ftrace_formats_open(struct inode *inode, struct file *file) > { > - int ret; > - > - ret = seq_open(file, &show_format_seq_ops); > - if (!ret) { > - struct seq_file *m = file->private_data; > - > - m->private = __start___trace_bprintk_fmt; > - } > - return ret; > + return seq_open(file, &show_format_seq_ops); > } > > static const struct file_operations ftrace_formats_fops = { -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/