aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/trace/ring_buffer.c
diff options
context:
space:
mode:
authorSteven Rostedt <srostedt@redhat.com>2010-05-21 13:32:26 -0400
committerSteven Rostedt <rostedt@goodmis.org>2010-05-25 11:57:26 -0400
commit2711ca237a084286ea1c2dcf82ab2aadab23a00d (patch)
treea795fa0e31e8557befd803153a33827b1d0c8764 /kernel/trace/ring_buffer.c
parentb3230c8b44da5838cf396942d5c1ab19f8e8f720 (diff)
ring-buffer: Move zeroing out excess in page to ring buffer code
Currently the trace splice code zeros out the excess bytes in the page before sending it off to userspace. This is to make sure userspace is not getting anything it should not be when reading the pages, because the excess data was never initialized to zero before writing (for perfomance reasons). But the splice code has no business in doing this work, it should be done by the ring buffer. With the latest changes for recording lost events, the splice code gets it wrong anyway. Move the zeroing out of excess bytes into the ring buffer code. Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
Diffstat (limited to 'kernel/trace/ring_buffer.c')
-rw-r--r--kernel/trace/ring_buffer.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c
index b0702ff78218..1da7b6ea8b85 100644
--- a/kernel/trace/ring_buffer.c
+++ b/kernel/trace/ring_buffer.c
@@ -3902,12 +3902,12 @@ int ring_buffer_read_page(struct ring_buffer *buffer,
3902 ret = read; 3902 ret = read;
3903 3903
3904 cpu_buffer->lost_events = 0; 3904 cpu_buffer->lost_events = 0;
3905
3906 commit = local_read(&bpage->commit);
3905 /* 3907 /*
3906 * Set a flag in the commit field if we lost events 3908 * Set a flag in the commit field if we lost events
3907 */ 3909 */
3908 if (missed_events) { 3910 if (missed_events) {
3909 commit = local_read(&bpage->commit);
3910
3911 /* If there is room at the end of the page to save the 3911 /* If there is room at the end of the page to save the
3912 * missed events, then record it there. 3912 * missed events, then record it there.
3913 */ 3913 */
@@ -3915,10 +3915,17 @@ int ring_buffer_read_page(struct ring_buffer *buffer,
3915 memcpy(&bpage->data[commit], &missed_events, 3915 memcpy(&bpage->data[commit], &missed_events,
3916 sizeof(missed_events)); 3916 sizeof(missed_events));
3917 local_add(RB_MISSED_STORED, &bpage->commit); 3917 local_add(RB_MISSED_STORED, &bpage->commit);
3918 commit += sizeof(missed_events);
3918 } 3919 }
3919 local_add(RB_MISSED_EVENTS, &bpage->commit); 3920 local_add(RB_MISSED_EVENTS, &bpage->commit);
3920 } 3921 }
3921 3922
3923 /*
3924 * This page may be off to user land. Zero it out here.
3925 */
3926 if (commit < BUF_PAGE_SIZE)
3927 memset(&bpage->data[commit], 0, BUF_PAGE_SIZE - commit);
3928
3922 out_unlock: 3929 out_unlock:
3923 spin_unlock_irqrestore(&cpu_buffer->reader_lock, flags); 3930 spin_unlock_irqrestore(&cpu_buffer->reader_lock, flags);
3924 3931