diff options
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/trace/ring_buffer.c | 11 | ||||
| -rw-r--r-- | kernel/trace/trace.c | 6 |
2 files changed, 9 insertions, 8 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 | ||
diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index ba0ec81158b2..95d0b1a28f93 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c | |||
| @@ -3661,7 +3661,6 @@ tracing_buffers_read(struct file *filp, char __user *ubuf, | |||
| 3661 | size_t count, loff_t *ppos) | 3661 | size_t count, loff_t *ppos) |
| 3662 | { | 3662 | { |
| 3663 | struct ftrace_buffer_info *info = filp->private_data; | 3663 | struct ftrace_buffer_info *info = filp->private_data; |
| 3664 | unsigned int pos; | ||
| 3665 | ssize_t ret; | 3664 | ssize_t ret; |
| 3666 | size_t size; | 3665 | size_t size; |
| 3667 | 3666 | ||
| @@ -3688,11 +3687,6 @@ tracing_buffers_read(struct file *filp, char __user *ubuf, | |||
| 3688 | if (ret < 0) | 3687 | if (ret < 0) |
| 3689 | return 0; | 3688 | return 0; |
| 3690 | 3689 | ||
| 3691 | pos = ring_buffer_page_len(info->spare); | ||
| 3692 | |||
| 3693 | if (pos < PAGE_SIZE) | ||
| 3694 | memset(info->spare + pos, 0, PAGE_SIZE - pos); | ||
| 3695 | |||
| 3696 | read: | 3690 | read: |
| 3697 | size = PAGE_SIZE - info->read; | 3691 | size = PAGE_SIZE - info->read; |
| 3698 | if (size > count) | 3692 | if (size > count) |
