mirror of
https://github.com/torvalds/linux.git
synced 2024-11-21 19:46:16 +00:00
tracing: Use refcount for trace_event_file reference counter
Instead of using an atomic counter for the trace_event_file reference counter, use the refcount interface. It has various checks to make sure the reference counting is correct, and will warn if it detects an error (like refcount_inc() on '0'). Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com> Link: https://lore.kernel.org/20240726144208.687cce24@rorschach.local.home Acked-by: Masami Hiramatsu (Google) <mhiramat@kernel.org> Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
This commit is contained in:
parent
b156040869
commit
6e2fdceffd
@ -680,7 +680,7 @@ struct trace_event_file {
|
||||
* caching and such. Which is mostly OK ;-)
|
||||
*/
|
||||
unsigned long flags;
|
||||
atomic_t ref; /* ref count for opened files */
|
||||
refcount_t ref; /* ref count for opened files */
|
||||
atomic_t sm_ref; /* soft-mode reference counter */
|
||||
atomic_t tm_ref; /* trigger-mode reference counter */
|
||||
};
|
||||
|
@ -992,18 +992,18 @@ static void remove_subsystem(struct trace_subsystem_dir *dir)
|
||||
|
||||
void event_file_get(struct trace_event_file *file)
|
||||
{
|
||||
atomic_inc(&file->ref);
|
||||
refcount_inc(&file->ref);
|
||||
}
|
||||
|
||||
void event_file_put(struct trace_event_file *file)
|
||||
{
|
||||
if (WARN_ON_ONCE(!atomic_read(&file->ref))) {
|
||||
if (WARN_ON_ONCE(!refcount_read(&file->ref))) {
|
||||
if (file->flags & EVENT_FILE_FL_FREED)
|
||||
kmem_cache_free(file_cachep, file);
|
||||
return;
|
||||
}
|
||||
|
||||
if (atomic_dec_and_test(&file->ref)) {
|
||||
if (refcount_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;
|
||||
@ -3003,7 +3003,7 @@ 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);
|
||||
refcount_set(&file->ref, 1);
|
||||
|
||||
return file;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user