From: Steven Rostedt <rostedt@goodmis.org>
To: linux-kernel@vger.kernel.org
Cc: Ingo Molnar <mingo@kernel.org>,
Andrew Morton <akpm@linux-foundation.org>,
Jiri Kosina <jkosina@suse.cz>, Petr Mladek <pmladek@suse.cz>
Subject: [for-next][PATCH 06/15] tracing: Clean up tracing_fill_pipe_page()
Date: Thu, 20 Nov 2014 10:21:26 -0500 [thread overview]
Message-ID: <20141120152716.574751217@goodmis.org> (raw)
In-Reply-To: <20141120152120.168868031@goodmis.org>
[-- Attachment #1: 0006-tracing-Clean-up-tracing_fill_pipe_page.patch --]
[-- Type: text/plain, Size: 1956 bytes --]
From: "Steven Rostedt (Red Hat)" <rostedt@goodmis.org>
The function tracing_fill_pipe_page() logic is a little confusing with the
use of count saving the seq.len and reusing it.
Instead of subtracting a number that is calculated from the saved
value of the seq.len from seq.len, just save the seq.len at the start
and if we need to reset it, just assign it again.
When the seq_buf overflow is len == size + 1, the current logic will
break. Changing it to use a saved length for resetting back to the
original value is more robust and will work when we change the way
seq_buf sets the overflow.
Link: http://lkml.kernel.org/r/20141118161546.GJ23958@pathway.suse.cz
Reviewed-by: Petr Mladek <pmladek@suse.cz>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
---
kernel/trace/trace.c | 25 +++++++++++++++++++------
1 file changed, 19 insertions(+), 6 deletions(-)
diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
index 7d7a07e9b9e9..0aa75be843a0 100644
--- a/kernel/trace/trace.c
+++ b/kernel/trace/trace.c
@@ -4575,20 +4575,33 @@ static size_t
tracing_fill_pipe_page(size_t rem, struct trace_iterator *iter)
{
size_t count;
+ int save_len;
int ret;
/* Seq buffer is page-sized, exactly what we need. */
for (;;) {
- count = iter->seq.seq.len;
+ save_len = iter->seq.seq.len;
ret = print_trace_line(iter);
- count = iter->seq.seq.len - count;
- if (rem < count) {
- rem = 0;
- iter->seq.seq.len -= count;
+
+ if (trace_seq_has_overflowed(&iter->seq)) {
+ iter->seq.seq.len = save_len;
break;
}
+
+ /*
+ * This should not be hit, because it should only
+ * be set if the iter->seq overflowed. But check it
+ * anyway to be safe.
+ */
if (ret == TRACE_TYPE_PARTIAL_LINE) {
- iter->seq.seq.len -= count;
+ iter->seq.seq.len = save_len;
+ break;
+ }
+
+ count = iter->seq.seq.len - save_len;
+ if (rem < count) {
+ rem = 0;
+ iter->seq.seq.len = save_len;
break;
}
--
2.1.1
next prev parent reply other threads:[~2014-11-20 15:30 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-11-20 15:21 [for-next][PATCH 00/15] tracing/seq-buf/printk: New seq-buf utility from trace_seq for printk in NMI Steven Rostedt
2014-11-20 15:21 ` [for-next][PATCH 01/15] tracing: Create seq_buf layer in trace_seq Steven Rostedt
2014-11-20 15:21 ` [for-next][PATCH 02/15] tracing: Convert seq_buf_path() to be like seq_path() Steven Rostedt
2014-11-20 15:21 ` [for-next][PATCH 03/15] tracing: Convert seq_buf fields to be like seq_file fields Steven Rostedt
2014-11-20 15:21 ` [for-next][PATCH 04/15] tracing: Add a seq_buf_clear() helper and clear len and readpos in init Steven Rostedt
2014-11-20 15:21 ` [for-next][PATCH 05/15] seq_buf: Create seq_buf_used() to find out how much was written Steven Rostedt
2014-11-20 15:21 ` Steven Rostedt [this message]
2014-11-20 15:21 ` [for-next][PATCH 07/15] tracing: Use trace_seq_used() and seq_buf_used() instead of len Steven Rostedt
2014-11-20 15:21 ` [for-next][PATCH 08/15] tracing: Add paranoid size check in trace_printk_seq() Steven Rostedt
2014-11-20 15:21 ` [for-next][PATCH 09/15] seq_buf: Add seq_buf_can_fit() helper function Steven Rostedt
2014-11-20 15:21 ` [for-next][PATCH 10/15] tracing: Have seq_buf use full buffer Steven Rostedt
2014-11-20 15:21 ` [for-next][PATCH 11/15] tracing: Add seq_buf_get_buf() and seq_buf_commit() helper functions Steven Rostedt
2014-11-20 15:21 ` [for-next][PATCH 12/15] seq-buf: Make seq_buf_bprintf() conditional on CONFIG_BINARY_PRINTF Steven Rostedt
2014-11-20 15:21 ` [for-next][PATCH 13/15] seq_buf: Move the seq_buf code to lib/ Steven Rostedt
2014-11-20 15:21 ` [for-next][PATCH 14/15] printk: Add per_cpu printk func to allow printk to be diverted Steven Rostedt
2014-11-20 15:21 ` [for-next][PATCH 15/15] x86/nmi: Perform a safe NMI stack trace on all CPUs Steven Rostedt
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20141120152716.574751217@goodmis.org \
--to=rostedt@goodmis.org \
--cc=akpm@linux-foundation.org \
--cc=jkosina@suse.cz \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=pmladek@suse.cz \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®