diff options
Diffstat (limited to 'kernel/trace/trace.c')
-rw-r--r-- | kernel/trace/trace.c | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index 42b9355033d4..44004d8aa3b3 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c | |||
@@ -6598,7 +6598,7 @@ tracing_buffers_read(struct file *filp, char __user *ubuf, | |||
6598 | { | 6598 | { |
6599 | struct ftrace_buffer_info *info = filp->private_data; | 6599 | struct ftrace_buffer_info *info = filp->private_data; |
6600 | struct trace_iterator *iter = &info->iter; | 6600 | struct trace_iterator *iter = &info->iter; |
6601 | ssize_t ret; | 6601 | ssize_t ret = 0; |
6602 | ssize_t size; | 6602 | ssize_t size; |
6603 | 6603 | ||
6604 | if (!count) | 6604 | if (!count) |
@@ -6612,10 +6612,15 @@ tracing_buffers_read(struct file *filp, char __user *ubuf, | |||
6612 | if (!info->spare) { | 6612 | if (!info->spare) { |
6613 | info->spare = ring_buffer_alloc_read_page(iter->trace_buffer->buffer, | 6613 | info->spare = ring_buffer_alloc_read_page(iter->trace_buffer->buffer, |
6614 | iter->cpu_file); | 6614 | iter->cpu_file); |
6615 | info->spare_cpu = iter->cpu_file; | 6615 | if (IS_ERR(info->spare)) { |
6616 | ret = PTR_ERR(info->spare); | ||
6617 | info->spare = NULL; | ||
6618 | } else { | ||
6619 | info->spare_cpu = iter->cpu_file; | ||
6620 | } | ||
6616 | } | 6621 | } |
6617 | if (!info->spare) | 6622 | if (!info->spare) |
6618 | return -ENOMEM; | 6623 | return ret; |
6619 | 6624 | ||
6620 | /* Do we have previous read data to read? */ | 6625 | /* Do we have previous read data to read? */ |
6621 | if (info->read < PAGE_SIZE) | 6626 | if (info->read < PAGE_SIZE) |
@@ -6790,8 +6795,9 @@ tracing_buffers_splice_read(struct file *file, loff_t *ppos, | |||
6790 | ref->ref = 1; | 6795 | ref->ref = 1; |
6791 | ref->buffer = iter->trace_buffer->buffer; | 6796 | ref->buffer = iter->trace_buffer->buffer; |
6792 | ref->page = ring_buffer_alloc_read_page(ref->buffer, iter->cpu_file); | 6797 | ref->page = ring_buffer_alloc_read_page(ref->buffer, iter->cpu_file); |
6793 | if (!ref->page) { | 6798 | if (IS_ERR(ref->page)) { |
6794 | ret = -ENOMEM; | 6799 | ret = PTR_ERR(ref->page); |
6800 | ref->page = NULL; | ||
6795 | kfree(ref); | 6801 | kfree(ref); |
6796 | break; | 6802 | break; |
6797 | } | 6803 | } |
@@ -8293,6 +8299,7 @@ __init static int tracer_alloc_buffers(void) | |||
8293 | if (ret < 0) | 8299 | if (ret < 0) |
8294 | goto out_free_cpumask; | 8300 | goto out_free_cpumask; |
8295 | /* Used for event triggers */ | 8301 | /* Used for event triggers */ |
8302 | ret = -ENOMEM; | ||
8296 | temp_buffer = ring_buffer_alloc(PAGE_SIZE, RB_FL_OVERWRITE); | 8303 | temp_buffer = ring_buffer_alloc(PAGE_SIZE, RB_FL_OVERWRITE); |
8297 | if (!temp_buffer) | 8304 | if (!temp_buffer) |
8298 | goto out_rm_hp_state; | 8305 | goto out_rm_hp_state; |
@@ -8407,4 +8414,4 @@ __init static int clear_boot_tracer(void) | |||
8407 | } | 8414 | } |
8408 | 8415 | ||
8409 | fs_initcall(tracer_init_tracefs); | 8416 | fs_initcall(tracer_init_tracefs); |
8410 | late_initcall(clear_boot_tracer); | 8417 | late_initcall_sync(clear_boot_tracer); |