From: Steven Rostedt <rostedt@goodmis.org>
To: linux-kernel@vger.kernel.org
Cc: Ingo Molnar <mingo@kernel.org>,
Andrew Morton <akpm@linux-foundation.org>,
Thomas Gleixner <tglx@linutronix.de>,
Frederic Weisbecker <fweisbec@gmail.com>,
Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>,
David Sharp <dhsharp@google.com>,
Vaibhav Nagarnaik <vnagarnaik@google.com>,
hcochran@lexmark.com,
Hiraku Toyooka <hiraku.toyooka.gu@hitachi.com>
Subject: [for-next][PATCH 14/17] tracing: Prevent deleting instances when they are being read
Date: Thu, 07 Mar 2013 22:00:12 -0500 [thread overview]
Message-ID: <20130308030654.046198011@goodmis.org> (raw)
In-Reply-To: 20130308025958.501479677@goodmis.org
[-- Attachment #1: 0014-tracing-Prevent-deleting-instances-when-they-are-bei.patch --]
[-- Type: text/plain, Size: 2425 bytes --]
From: "Steven Rostedt (Red Hat)" <srostedt@redhat.com>
Add a ref count to the trace_array structure and prevent removal
of instances that have open descriptors.
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
---
kernel/trace/trace.c | 23 +++++++++++++++++++++++
kernel/trace/trace.h | 1 +
2 files changed, 24 insertions(+)
diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
index e6547ea..8ede7d1 100644
--- a/kernel/trace/trace.c
+++ b/kernel/trace/trace.c
@@ -2612,6 +2612,8 @@ __tracing_open(struct inode *inode, struct file *file, bool snapshot)
tracing_iter_reset(iter, cpu);
}
+ tr->ref++;
+
mutex_unlock(&trace_types_lock);
return iter;
@@ -2648,6 +2650,10 @@ static int tracing_release(struct inode *inode, struct file *file)
tr = iter->tr;
mutex_lock(&trace_types_lock);
+
+ WARN_ON(!tr->ref);
+ tr->ref--;
+
for_each_tracing_cpu(cpu) {
if (iter->buffer_iter[cpu])
ring_buffer_read_finish(iter->buffer_iter[cpu]);
@@ -4431,6 +4437,10 @@ static int tracing_buffers_open(struct inode *inode, struct file *filp)
if (!info)
return -ENOMEM;
+ mutex_lock(&trace_types_lock);
+
+ tr->ref++;
+
info->iter.tr = tr;
info->iter.cpu_file = tc->cpu;
info->iter.trace = tr->current_trace;
@@ -4441,6 +4451,8 @@ static int tracing_buffers_open(struct inode *inode, struct file *filp)
filp->private_data = info;
+ mutex_unlock(&trace_types_lock);
+
return nonseekable_open(inode, filp);
}
@@ -4539,10 +4551,17 @@ static int tracing_buffers_release(struct inode *inode, struct file *file)
struct ftrace_buffer_info *info = file->private_data;
struct trace_iterator *iter = &info->iter;
+ mutex_lock(&trace_types_lock);
+
+ WARN_ON(!iter->tr->ref);
+ iter->tr->ref--;
+
if (info->spare)
ring_buffer_free_read_page(iter->trace_buffer->buffer, info->spare);
kfree(info);
+ mutex_unlock(&trace_types_lock);
+
return 0;
}
@@ -5375,6 +5394,10 @@ static int instance_delete(const char *name)
if (!found)
goto out_unlock;
+ ret = -EBUSY;
+ if (tr->ref)
+ goto out_unlock;
+
list_del(&tr->list);
event_trace_del_tracer(tr);
diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h
index 6111933..a19459d 100644
--- a/kernel/trace/trace.h
+++ b/kernel/trace/trace.h
@@ -219,6 +219,7 @@ struct trace_array {
struct list_head systems;
struct list_head events;
struct task_struct *waiter;
+ int ref;
};
enum {
--
1.7.10.4
next prev parent reply other threads:[~2013-03-08 3:07 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-03-08 2:59 [for-next][PATCH 00/17] tracing: multi-buffers with snapshots, per_cpu and some debugging tools Steven Rostedt
2013-03-08 2:59 ` [for-next][PATCH 01/17] ring-buffer: Init waitqueue for blocked readers Steven Rostedt
2013-03-08 3:00 ` [for-next][PATCH 02/17] tracing: Add comment for trace event flag IGNORE_ENABLE Steven Rostedt
2013-03-08 3:00 ` [for-next][PATCH 03/17] tracing: Only clear trace buffer on module unload if event was traced Steven Rostedt
2013-03-08 3:00 ` [for-next][PATCH 04/17] tracing: Clear all trace buffers when unloaded module event was used Steven Rostedt
2013-03-08 3:00 ` [for-next][PATCH 05/17] tracing: Enable snapshot when any latency tracer is enabled Steven Rostedt
2013-03-08 3:00 ` [for-next][PATCH 06/17] tracing: Consolidate max_tr into main trace_array structure Steven Rostedt
2013-03-08 3:00 ` [for-next][PATCH 07/17] tracing: Add snapshot in the per_cpu trace directories Steven Rostedt
2013-03-08 3:00 ` [for-next][PATCH 08/17] tracing: Add config option to allow snapshot to swap per cpu Steven Rostedt
2013-03-08 3:00 ` [for-next][PATCH 09/17] tracing: Add snapshot_raw to extract the raw data from snapshot Steven Rostedt
2013-03-08 3:00 ` [for-next][PATCH 10/17] tracing: Have trace_array keep track if snapshot buffer is allocated Steven Rostedt
2013-03-08 3:00 ` [for-next][PATCH 11/17] tracing: Consolidate buffer allocation code Steven Rostedt
2013-03-08 3:00 ` [for-next][PATCH 12/17] tracing: Add snapshot feature to instances Steven Rostedt
2013-03-08 3:00 ` [for-next][PATCH 13/17] tracing: Add per_cpu directory into tracing instances Steven Rostedt
2013-03-08 3:00 ` Steven Rostedt [this message]
2013-03-08 3:00 ` [for-next][PATCH 15/17] tracing: Add internal tracing_snapshot() functions Steven Rostedt
2013-03-08 3:00 ` [for-next][PATCH 16/17] ring-buffer: Do not use schedule_work_on() for current CPU Steven Rostedt
2013-03-08 3:00 ` [for-next][PATCH 17/17] tracing: Move the tracing selftest code into its own function Steven Rostedt
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20130308030654.046198011@goodmis.org \
--to=rostedt@goodmis.org \
--cc=akpm@linux-foundation.org \
--cc=dhsharp@google.com \
--cc=fweisbec@gmail.com \
--cc=hcochran@lexmark.com \
--cc=hiraku.toyooka.gu@hitachi.com \
--cc=linux-kernel@vger.kernel.org \
--cc=masami.hiramatsu.pt@hitachi.com \
--cc=mingo@kernel.org \
--cc=tglx@linutronix.de \
--cc=vnagarnaik@google.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox