From 0076d71a20ef3fc3aa14d24fa1ef55920af03469 Mon Sep 17 00:00:00 2001 From: Lai Jiangshan Date: Thu, 2 Apr 2009 15:16:59 +0800 Subject: [PATCH] --- yaml --- r: 143109 b: refs/heads/master c: ddd538f3e6a1a4bec2f6942f83a753263e6577b4 h: refs/heads/master i: 143107: ec8c2464511a24ba577aff6b112aef3b2aa2a8f1 v: v3 --- [refs] | 2 +- trunk/kernel/trace/trace.c | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/[refs] b/[refs] index c7d02ade0d3a..774a9f831073 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: d1e7e02f30be672c6f6ee40908be83877a0d49d1 +refs/heads/master: ddd538f3e6a1a4bec2f6942f83a753263e6577b4 diff --git a/trunk/kernel/trace/trace.c b/trunk/kernel/trace/trace.c index 24b0168f1a29..8e189ffb899a 100644 --- a/trunk/kernel/trace/trace.c +++ b/trunk/kernel/trace/trace.c @@ -3277,19 +3277,13 @@ static int tracing_buffers_open(struct inode *inode, struct file *filp) info->tr = &global_trace; info->cpu = cpu; - info->spare = ring_buffer_alloc_read_page(info->tr->buffer); + info->spare = NULL; /* Force reading ring buffer for first read */ info->read = (unsigned int)-1; - if (!info->spare) - goto out; filp->private_data = info; return nonseekable_open(inode, filp); - - out: - kfree(info); - return -ENOMEM; } static ssize_t @@ -3304,6 +3298,11 @@ tracing_buffers_read(struct file *filp, char __user *ubuf, if (!count) return 0; + if (!info->spare) + info->spare = ring_buffer_alloc_read_page(info->tr->buffer); + if (!info->spare) + return -ENOMEM; + /* Do we have previous read data to read? */ if (info->read < PAGE_SIZE) goto read; @@ -3342,7 +3341,8 @@ static int tracing_buffers_release(struct inode *inode, struct file *file) { struct ftrace_buffer_info *info = file->private_data; - ring_buffer_free_read_page(info->tr->buffer, info->spare); + if (info->spare) + ring_buffer_free_read_page(info->tr->buffer, info->spare); kfree(info); return 0;