diff options
Diffstat (limited to 'kernel/trace/trace_events.c')
| -rw-r--r-- | kernel/trace/trace_events.c | 32 | 
1 files changed, 13 insertions, 19 deletions
| diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c index ed367d713be0..91951d038ba4 100644 --- a/kernel/trace/trace_events.c +++ b/kernel/trace/trace_events.c @@ -992,19 +992,6 @@ static void remove_subsystem(struct trace_subsystem_dir *dir)  static void remove_event_file_dir(struct trace_event_file *file)  { -	struct dentry *dir = file->dir; -	struct dentry *child; - -	if (dir) { -		spin_lock(&dir->d_lock);	/* probably unneeded */ -		list_for_each_entry(child, &dir->d_subdirs, d_child) { -			if (d_really_is_positive(child))	/* probably unneeded */ -				d_inode(child)->i_private = NULL; -		} -		spin_unlock(&dir->d_lock); - -		tracefs_remove(dir); -	}  	eventfs_remove(file->ef);  	list_del(&file->list);  	remove_subsystem(file->system); @@ -2103,9 +2090,10 @@ static const struct file_operations ftrace_set_event_notrace_pid_fops = {  };  static const struct file_operations ftrace_enable_fops = { -	.open = tracing_open_generic, +	.open = tracing_open_file_tr,  	.read = event_enable_read,  	.write = event_enable_write, +	.release = tracing_release_file_tr,  	.llseek = default_llseek,  }; @@ -2122,9 +2110,10 @@ static const struct file_operations ftrace_event_id_fops = {  };  static const struct file_operations ftrace_event_filter_fops = { -	.open = tracing_open_generic, +	.open = tracing_open_file_tr,  	.read = event_filter_read,  	.write = event_filter_write, +	.release = tracing_release_file_tr,  	.llseek = default_llseek,  }; @@ -2297,6 +2286,7 @@ event_subsystem_dir(struct trace_array *tr, const char *name,  {  	struct event_subsystem *system, *iter;  	struct trace_subsystem_dir *dir; +	struct eventfs_file *ef;  	int res;  	/* First see if we did not already create this dir */ @@ -2329,13 +2319,14 @@ event_subsystem_dir(struct trace_array *tr, const char *name,  	} else  		__get_system(system); -	dir->ef = eventfs_add_subsystem_dir(name, parent); -	if (IS_ERR(dir->ef)) { +	ef = eventfs_add_subsystem_dir(name, parent); +	if (IS_ERR(ef)) {  		pr_warn("Failed to create system directory %s\n", name);  		__put_system(system);  		goto out_free;  	} +	dir->ef = ef;  	dir->tr = tr;  	dir->ref_count = 1;  	dir->nr_events = 1; @@ -2415,6 +2406,7 @@ event_create_dir(struct dentry *parent, struct trace_event_file *file)  	struct trace_event_call *call = file->event_call;  	struct eventfs_file *ef_subsystem = NULL;  	struct trace_array *tr = file->tr; +	struct eventfs_file *ef;  	const char *name;  	int ret; @@ -2431,12 +2423,14 @@ event_create_dir(struct dentry *parent, struct trace_event_file *file)  		return -ENOMEM;  	name = trace_event_name(call); -	file->ef = eventfs_add_dir(name, ef_subsystem); -	if (IS_ERR(file->ef)) { +	ef = eventfs_add_dir(name, ef_subsystem); +	if (IS_ERR(ef)) {  		pr_warn("Could not create tracefs '%s' directory\n", name);  		return -1;  	} +	file->ef = ef; +  	if (call->class->reg && !(call->flags & TRACE_EVENT_FL_IGNORE_ENABLE))  		eventfs_add_file("enable", TRACE_MODE_WRITE, file->ef, file,  				  &ftrace_enable_fops); |