|
@@ -5494,7 +5494,7 @@ tracing_buffers_splice_read(struct file *file, loff_t *ppos,
|
|
|
};
|
|
|
struct buffer_ref *ref;
|
|
|
int entries, size, i;
|
|
|
- ssize_t ret;
|
|
|
+ ssize_t ret = 0;
|
|
|
|
|
|
mutex_lock(&trace_types_lock);
|
|
|
|
|
@@ -5532,13 +5532,16 @@ tracing_buffers_splice_read(struct file *file, loff_t *ppos,
|
|
|
int r;
|
|
|
|
|
|
ref = kzalloc(sizeof(*ref), GFP_KERNEL);
|
|
|
- if (!ref)
|
|
|
+ if (!ref) {
|
|
|
+ ret = -ENOMEM;
|
|
|
break;
|
|
|
+ }
|
|
|
|
|
|
ref->ref = 1;
|
|
|
ref->buffer = iter->trace_buffer->buffer;
|
|
|
ref->page = ring_buffer_alloc_read_page(ref->buffer, iter->cpu_file);
|
|
|
if (!ref->page) {
|
|
|
+ ret = -ENOMEM;
|
|
|
kfree(ref);
|
|
|
break;
|
|
|
}
|
|
@@ -5576,6 +5579,9 @@ tracing_buffers_splice_read(struct file *file, loff_t *ppos,
|
|
|
|
|
|
/* did we read anything? */
|
|
|
if (!spd.nr_pages) {
|
|
|
+ if (ret)
|
|
|
+ goto out;
|
|
|
+
|
|
|
if ((file->f_flags & O_NONBLOCK) || (flags & SPLICE_F_NONBLOCK)) {
|
|
|
ret = -EAGAIN;
|
|
|
goto out;
|