tracing: Add rmdir to remove multibuffer instances
Add a method to the hijacked dentry descriptor of the "instances" directory to allow for rmdir to remove an instance of a multibuffer. Example: cd /debug/tracing/instances mkdir hello ls hello/ rmdir hello ls Like the mkdir method, the i_mutex is dropped for the instances directory. The instances directory is created at boot up and can not be renamed or removed. The trace_types_lock mutex is used to synchronize adding and removing of instances. I've run several stress tests with different threads trying to create and delete directories of the same name, and it has stood up fine. Cc: Al Viro <viro@zeniv.linux.org.uk> Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
This commit is contained in:
committed by
Steven Rostedt
parent
277ba04461
commit
0c8916c342
@ -1709,6 +1709,20 @@ __trace_add_event_dirs(struct trace_array *tr)
|
||||
}
|
||||
}
|
||||
|
||||
/* Remove the event directory structure for a trace directory. */
|
||||
static void
|
||||
__trace_remove_event_dirs(struct trace_array *tr)
|
||||
{
|
||||
struct ftrace_event_file *file, *next;
|
||||
|
||||
list_for_each_entry_safe(file, next, &tr->events, list) {
|
||||
list_del(&file->list);
|
||||
debugfs_remove_recursive(file->dir);
|
||||
remove_subsystem(file->system);
|
||||
kfree(file);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
__add_event_to_tracers(struct ftrace_event_call *call,
|
||||
struct ftrace_module_file_ops *file_ops)
|
||||
@ -1793,6 +1807,25 @@ int event_trace_add_tracer(struct dentry *parent, struct trace_array *tr)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int event_trace_del_tracer(struct trace_array *tr)
|
||||
{
|
||||
/* Disable any running events */
|
||||
__ftrace_set_clr_event(tr, NULL, NULL, NULL, 0);
|
||||
|
||||
mutex_lock(&event_mutex);
|
||||
|
||||
down_write(&trace_event_mutex);
|
||||
__trace_remove_event_dirs(tr);
|
||||
debugfs_remove_recursive(tr->event_dir);
|
||||
up_write(&trace_event_mutex);
|
||||
|
||||
tr->event_dir = NULL;
|
||||
|
||||
mutex_unlock(&event_mutex);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static __init int event_trace_enable(void)
|
||||
{
|
||||
struct trace_array *tr = top_trace_array();
|
||||
|
Reference in New Issue
Block a user