Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 69365d1a authored by Greg Kroah-Hartman's avatar Greg Kroah-Hartman
Browse files

Revert "tracing: Have trace_event_file have ref counters"



This reverts commit 961c4511 which is
commit bb32500fb9b78215e4ef6ee8b4345c5f5d7eafb4 upstream.

It breaks the Android ABI and can be brought back later in an abi-safe
way if it is needed.

Bug: 161946584
Change-Id: Id5da117def3da9c182501e30ee84bea05da7e492
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@google.com>
parent 288ce216
Loading
Loading
Loading
Loading
+0 −4
Original line number Diff line number Diff line
@@ -341,7 +341,6 @@ enum {
	EVENT_FILE_FL_TRIGGER_COND_BIT,
	EVENT_FILE_FL_PID_FILTER_BIT,
	EVENT_FILE_FL_WAS_ENABLED_BIT,
	EVENT_FILE_FL_FREED_BIT,
};

/*
@@ -358,7 +357,6 @@ enum {
 *  TRIGGER_COND  - When set, one or more triggers has an associated filter
 *  PID_FILTER    - When set, the event is filtered based on pid
 *  WAS_ENABLED   - Set when enabled to know to clear trace on module removal
 *  FREED         - File descriptor is freed, all fields should be considered invalid
 */
enum {
	EVENT_FILE_FL_ENABLED		= (1 << EVENT_FILE_FL_ENABLED_BIT),
@@ -372,7 +370,6 @@ enum {
	EVENT_FILE_FL_TRIGGER_COND	= (1 << EVENT_FILE_FL_TRIGGER_COND_BIT),
	EVENT_FILE_FL_PID_FILTER	= (1 << EVENT_FILE_FL_PID_FILTER_BIT),
	EVENT_FILE_FL_WAS_ENABLED	= (1 << EVENT_FILE_FL_WAS_ENABLED_BIT),
	EVENT_FILE_FL_FREED		= (1 << EVENT_FILE_FL_FREED_BIT),
};

struct trace_event_file {
@@ -401,7 +398,6 @@ struct trace_event_file {
	 * caching and such. Which is mostly OK ;-)
	 */
	unsigned long		flags;
	atomic_t		ref;	/* ref count for opened files */
	atomic_t		sm_ref;	/* soft-mode reference counter */
	atomic_t		tm_ref;	/* trigger-mode reference counter */
};
+0 −15
Original line number Diff line number Diff line
@@ -4257,20 +4257,6 @@ int tracing_open_file_tr(struct inode *inode, struct file *filp)
	if (ret)
		return ret;

	mutex_lock(&event_mutex);

	/* Fail if the file is marked for removal */
	if (file->flags & EVENT_FILE_FL_FREED) {
		trace_array_put(file->tr);
		ret = -ENODEV;
	} else {
		event_file_get(file);
	}

	mutex_unlock(&event_mutex);
	if (ret)
		return ret;

	filp->private_data = inode->i_private;

	return 0;
@@ -4281,7 +4267,6 @@ int tracing_release_file_tr(struct inode *inode, struct file *filp)
	struct trace_event_file *file = inode->i_private;

	trace_array_put(file->tr);
	event_file_put(file);

	return 0;
}
+0 −3
Original line number Diff line number Diff line
@@ -1696,9 +1696,6 @@ extern int register_event_command(struct event_command *cmd);
extern int unregister_event_command(struct event_command *cmd);
extern int register_trigger_hist_enable_disable_cmds(void);

extern void event_file_get(struct trace_event_file *file);
extern void event_file_put(struct trace_event_file *file);

/**
 * struct event_trigger_ops - callbacks for trace event triggers
 *
+13 −26
Original line number Diff line number Diff line
@@ -698,33 +698,21 @@ static void remove_subsystem(struct trace_subsystem_dir *dir)
	}
}

void event_file_get(struct trace_event_file *file)
{
	atomic_inc(&file->ref);
}

void event_file_put(struct trace_event_file *file)
{
	if (WARN_ON_ONCE(!atomic_read(&file->ref))) {
		if (file->flags & EVENT_FILE_FL_FREED)
			kmem_cache_free(file_cachep, file);
		return;
	}

	if (atomic_dec_and_test(&file->ref)) {
		/* Count should only go to zero when it is freed */
		if (WARN_ON_ONCE(!(file->flags & EVENT_FILE_FL_FREED)))
			return;
		kmem_cache_free(file_cachep, file);
	}
}

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);

	if (dir)
		tracefs_remove_recursive(dir);
	}

	list_del(&file->list);
	remove_subsystem(file->system);
@@ -1045,7 +1033,7 @@ event_enable_read(struct file *filp, char __user *ubuf, size_t cnt,
		flags = file->flags;
	mutex_unlock(&event_mutex);

	if (!file || flags & EVENT_FILE_FL_FREED)
	if (!file)
		return -ENODEV;

	if (flags & EVENT_FILE_FL_ENABLED &&
@@ -1083,7 +1071,7 @@ event_enable_write(struct file *filp, const char __user *ubuf, size_t cnt,
		ret = -ENODEV;
		mutex_lock(&event_mutex);
		file = event_file_data(filp);
		if (likely(file && !(file->flags & EVENT_FILE_FL_FREED)))
		if (likely(file))
			ret = ftrace_event_enable_disable(file, val);
		mutex_unlock(&event_mutex);
		break;
@@ -1352,7 +1340,7 @@ event_filter_read(struct file *filp, char __user *ubuf, size_t cnt,

	mutex_lock(&event_mutex);
	file = event_file_data(filp);
	if (file && !(file->flags & EVENT_FILE_FL_FREED))
	if (file)
		print_event_filter(file, s);
	mutex_unlock(&event_mutex);

@@ -2276,7 +2264,6 @@ trace_create_new_event(struct trace_event_call *call,
	atomic_set(&file->tm_ref, 0);
	INIT_LIST_HEAD(&file->triggers);
	list_add(&file->list, &tr->events);
	event_file_get(file);

	return file;
}
+0 −3
Original line number Diff line number Diff line
@@ -1800,9 +1800,6 @@ int apply_event_filter(struct trace_event_file *file, char *filter_string)
	struct event_filter *filter = NULL;
	int err;

	if (file->flags & EVENT_FILE_FL_FREED)
		return -ENODEV;

	if (!strcmp(strstrip(filter_string), "0")) {
		filter_disable(file);
		filter = event_filter(file);