* [PATCH 0/3] tracing: Some cleanups of event trigger code
@ 2025-05-07 14:53 Steven Rostedt
2025-05-07 14:53 ` [PATCH 1/3] tracing: Rename event_trigger_alloc() to trigger_data_alloc() Steven Rostedt
` (3 more replies)
0 siblings, 4 replies; 6+ messages in thread
From: Steven Rostedt @ 2025-05-07 14:53 UTC (permalink / raw)
To: linux-kernel, linux-trace-kernel
Cc: Masami Hiramatsu, Mark Rutland, Mathieu Desnoyers, Andrew Morton,
Tom Zanussi
These are minor clean ups of the trace_events_trigger code.
- Rename event_trigger_alloc() to trigger_data_alloc() as it
is supposed to be freed by trigger_data_free().
- Remove unneeded goto outs
- Add consistent cleanup in event_trigger_parse()
Miaoqian Lin (1):
tracing: Fix error handling in event_trigger_parse()
Steven Rostedt (2):
tracing: Rename event_trigger_alloc() to trigger_data_alloc()
tracing: Remove unnecessary "goto out" that simply returns ret is trigger code
----
kernel/trace/trace.h | 8 ++---
kernel/trace/trace_events_hist.c | 2 +-
kernel/trace/trace_events_trigger.c | 64 ++++++++++++++++---------------------
3 files changed, 31 insertions(+), 43 deletions(-)
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH 1/3] tracing: Rename event_trigger_alloc() to trigger_data_alloc()
2025-05-07 14:53 [PATCH 0/3] tracing: Some cleanups of event trigger code Steven Rostedt
@ 2025-05-07 14:53 ` Steven Rostedt
2025-05-07 14:53 ` [PATCH 2/3] tracing: Fix error handling in event_trigger_parse() Steven Rostedt
` (2 subsequent siblings)
3 siblings, 0 replies; 6+ messages in thread
From: Steven Rostedt @ 2025-05-07 14:53 UTC (permalink / raw)
To: linux-kernel, linux-trace-kernel
Cc: Masami Hiramatsu, Mark Rutland, Mathieu Desnoyers, Andrew Morton,
Tom Zanussi
From: Steven Rostedt <rostedt@goodmis.org>
The function event_trigger_alloc() creates an event_trigger_data
descriptor and states that it needs to be freed via event_trigger_free().
This is incorrect, it needs to be freed by trigger_data_free() as
event_trigger_free() adds ref counting.
Rename event_trigger_alloc() to trigger_data_alloc() and state that it
needs to be freed via trigger_data_free(). This naming convention
was introducing bugs.
Fixes: 86599dbe2c527 ("tracing: Add helper functions to simplify event_command.parse() callback handling")
Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
---
kernel/trace/trace.h | 8 +++-----
kernel/trace/trace_events_hist.c | 2 +-
kernel/trace/trace_events_trigger.c | 16 ++++++++--------
3 files changed, 12 insertions(+), 14 deletions(-)
diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h
index a2639daea47b..053af6e4e7e0 100644
--- a/kernel/trace/trace.h
+++ b/kernel/trace/trace.h
@@ -1774,6 +1774,9 @@ extern int event_enable_register_trigger(char *glob,
extern void event_enable_unregister_trigger(char *glob,
struct event_trigger_data *test,
struct trace_event_file *file);
+extern struct event_trigger_data *
+trigger_data_alloc(struct event_command *cmd_ops, char *cmd, char *param,
+ void *private_data);
extern void trigger_data_free(struct event_trigger_data *data);
extern int event_trigger_init(struct event_trigger_data *data);
extern int trace_event_trigger_enable_disable(struct trace_event_file *file,
@@ -1800,11 +1803,6 @@ extern bool event_trigger_check_remove(const char *glob);
extern bool event_trigger_empty_param(const char *param);
extern int event_trigger_separate_filter(char *param_and_filter, char **param,
char **filter, bool param_required);
-extern struct event_trigger_data *
-event_trigger_alloc(struct event_command *cmd_ops,
- char *cmd,
- char *param,
- void *private_data);
extern int event_trigger_parse_num(char *trigger,
struct event_trigger_data *trigger_data);
extern int event_trigger_set_filter(struct event_command *cmd_ops,
diff --git a/kernel/trace/trace_events_hist.c b/kernel/trace/trace_events_hist.c
index 58c9535f61df..1d536219b624 100644
--- a/kernel/trace/trace_events_hist.c
+++ b/kernel/trace/trace_events_hist.c
@@ -6826,7 +6826,7 @@ static int event_hist_trigger_parse(struct event_command *cmd_ops,
return PTR_ERR(hist_data);
}
- trigger_data = event_trigger_alloc(cmd_ops, cmd, param, hist_data);
+ trigger_data = trigger_data_alloc(cmd_ops, cmd, param, hist_data);
if (!trigger_data) {
ret = -ENOMEM;
goto out_free;
diff --git a/kernel/trace/trace_events_trigger.c b/kernel/trace/trace_events_trigger.c
index b66b6d235d91..dac3344ee345 100644
--- a/kernel/trace/trace_events_trigger.c
+++ b/kernel/trace/trace_events_trigger.c
@@ -804,7 +804,7 @@ int event_trigger_separate_filter(char *param_and_filter, char **param,
}
/**
- * event_trigger_alloc - allocate and init event_trigger_data for a trigger
+ * trigger_data_alloc - allocate and init event_trigger_data for a trigger
* @cmd_ops: The event_command operations for the trigger
* @cmd: The cmd string
* @param: The param string
@@ -815,14 +815,14 @@ int event_trigger_separate_filter(char *param_and_filter, char **param,
* trigger_ops to assign to the event_trigger_data. @private_data can
* also be passed in and associated with the event_trigger_data.
*
- * Use event_trigger_free() to free an event_trigger_data object.
+ * Use trigger_data_free() to free an event_trigger_data object.
*
* Return: The trigger_data object success, NULL otherwise
*/
-struct event_trigger_data *event_trigger_alloc(struct event_command *cmd_ops,
- char *cmd,
- char *param,
- void *private_data)
+struct event_trigger_data *trigger_data_alloc(struct event_command *cmd_ops,
+ char *cmd,
+ char *param,
+ void *private_data)
{
struct event_trigger_data *trigger_data;
const struct event_trigger_ops *trigger_ops;
@@ -989,7 +989,7 @@ event_trigger_parse(struct event_command *cmd_ops,
return ret;
ret = -ENOMEM;
- trigger_data = event_trigger_alloc(cmd_ops, cmd, param, file);
+ trigger_data = trigger_data_alloc(cmd_ops, cmd, param, file);
if (!trigger_data)
goto out;
@@ -1793,7 +1793,7 @@ int event_enable_trigger_parse(struct event_command *cmd_ops,
enable_data->enable = enable;
enable_data->file = event_enable_file;
- trigger_data = event_trigger_alloc(cmd_ops, cmd, param, enable_data);
+ trigger_data = trigger_data_alloc(cmd_ops, cmd, param, enable_data);
if (!trigger_data) {
kfree(enable_data);
goto out;
--
2.47.2
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 2/3] tracing: Fix error handling in event_trigger_parse()
2025-05-07 14:53 [PATCH 0/3] tracing: Some cleanups of event trigger code Steven Rostedt
2025-05-07 14:53 ` [PATCH 1/3] tracing: Rename event_trigger_alloc() to trigger_data_alloc() Steven Rostedt
@ 2025-05-07 14:53 ` Steven Rostedt
2025-05-07 14:53 ` [PATCH 3/3] tracing: Remove unnecessary "goto out" that simply returns ret is trigger code Steven Rostedt
2025-05-12 20:47 ` [PATCH 0/3] tracing: Some cleanups of event " Tom Zanussi
3 siblings, 0 replies; 6+ messages in thread
From: Steven Rostedt @ 2025-05-07 14:53 UTC (permalink / raw)
To: linux-kernel, linux-trace-kernel
Cc: Masami Hiramatsu, Mark Rutland, Mathieu Desnoyers, Andrew Morton,
Tom Zanussi, Miaoqian Lin
From: Miaoqian Lin <linmq006@gmail.com>
According to trigger_data_alloc() doc, trigger_data_free() should be
used to free an event_trigger_data object. This fixes a mismatch introduced
when kzalloc was replaced with trigger_data_alloc without updating
the corresponding deallocation calls.
Cc: Masami Hiramatsu <mhiramat@kernel.org>
Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Cc: Tom Zanussi <zanussi@kernel.org>
Link: https://lore.kernel.org/20250318112737.4174-1-linmq006@gmail.com
Fixes: e1f187d09e11 ("tracing: Have existing event_command.parse() implementations use helpers")
Signed-off-by: Miaoqian Lin <linmq006@gmail.com>
[ SDR: Changed event_trigger_alloc/free() to trigger_data_alloc/free() ]
Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
---
kernel/trace/trace_events_trigger.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/kernel/trace/trace_events_trigger.c b/kernel/trace/trace_events_trigger.c
index dac3344ee345..c316badc608b 100644
--- a/kernel/trace/trace_events_trigger.c
+++ b/kernel/trace/trace_events_trigger.c
@@ -995,7 +995,7 @@ event_trigger_parse(struct event_command *cmd_ops,
if (remove) {
event_trigger_unregister(cmd_ops, file, glob+1, trigger_data);
- kfree(trigger_data);
+ trigger_data_free(trigger_data);
ret = 0;
goto out;
}
@@ -1022,7 +1022,7 @@ event_trigger_parse(struct event_command *cmd_ops,
out_free:
event_trigger_reset_filter(cmd_ops, trigger_data);
- kfree(trigger_data);
+ trigger_data_free(trigger_data);
goto out;
}
--
2.47.2
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 3/3] tracing: Remove unnecessary "goto out" that simply returns ret is trigger code
2025-05-07 14:53 [PATCH 0/3] tracing: Some cleanups of event trigger code Steven Rostedt
2025-05-07 14:53 ` [PATCH 1/3] tracing: Rename event_trigger_alloc() to trigger_data_alloc() Steven Rostedt
2025-05-07 14:53 ` [PATCH 2/3] tracing: Fix error handling in event_trigger_parse() Steven Rostedt
@ 2025-05-07 14:53 ` Steven Rostedt
2025-05-12 20:47 ` [PATCH 0/3] tracing: Some cleanups of event " Tom Zanussi
3 siblings, 0 replies; 6+ messages in thread
From: Steven Rostedt @ 2025-05-07 14:53 UTC (permalink / raw)
To: linux-kernel, linux-trace-kernel
Cc: Masami Hiramatsu, Mark Rutland, Mathieu Desnoyers, Andrew Morton,
Tom Zanussi
From: Steven Rostedt <rostedt@goodmis.org>
There's several functions that have "goto out;" where the label out is just:
out:
return ret;
Simplify the code by just doing the return in the location and removing
all the out labels and jumps.
Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
---
kernel/trace/trace_events_trigger.c | 44 +++++++++++------------------
1 file changed, 17 insertions(+), 27 deletions(-)
diff --git a/kernel/trace/trace_events_trigger.c b/kernel/trace/trace_events_trigger.c
index c316badc608b..fdd1112388e9 100644
--- a/kernel/trace/trace_events_trigger.c
+++ b/kernel/trace/trace_events_trigger.c
@@ -552,16 +552,14 @@ static int register_trigger(char *glob,
lockdep_assert_held(&event_mutex);
list_for_each_entry(test, &file->triggers, list) {
- if (test->cmd_ops->trigger_type == data->cmd_ops->trigger_type) {
- ret = -EEXIST;
- goto out;
- }
+ if (test->cmd_ops->trigger_type == data->cmd_ops->trigger_type)
+ return -EEXIST;
}
if (data->ops->init) {
ret = data->ops->init(data);
if (ret < 0)
- goto out;
+ return ret;
}
list_add_rcu(&data->list, &file->triggers);
@@ -572,7 +570,6 @@ static int register_trigger(char *glob,
list_del_rcu(&data->list);
update_cond_flag(file);
}
-out:
return ret;
}
@@ -770,7 +767,7 @@ int event_trigger_separate_filter(char *param_and_filter, char **param,
if (!param_and_filter) {
if (param_required)
ret = -EINVAL;
- goto out;
+ return ret;
}
/*
@@ -781,7 +778,7 @@ int event_trigger_separate_filter(char *param_and_filter, char **param,
*/
if (!param_required && param_and_filter && !isdigit(param_and_filter[0])) {
*filter = param_and_filter;
- goto out;
+ return ret;
}
/*
@@ -799,7 +796,6 @@ int event_trigger_separate_filter(char *param_and_filter, char **param,
if (!**filter)
*filter = NULL;
}
-out:
return ret;
}
@@ -991,13 +987,12 @@ event_trigger_parse(struct event_command *cmd_ops,
ret = -ENOMEM;
trigger_data = trigger_data_alloc(cmd_ops, cmd, param, file);
if (!trigger_data)
- goto out;
+ return ret;
if (remove) {
event_trigger_unregister(cmd_ops, file, glob+1, trigger_data);
trigger_data_free(trigger_data);
- ret = 0;
- goto out;
+ return 0;
}
ret = event_trigger_parse_num(param, trigger_data);
@@ -1017,13 +1012,12 @@ event_trigger_parse(struct event_command *cmd_ops,
/* Down the counter of trigger_data or free it if not used anymore */
event_trigger_free(trigger_data);
- out:
return ret;
out_free:
event_trigger_reset_filter(cmd_ops, trigger_data);
trigger_data_free(trigger_data);
- goto out;
+ return ret;
}
/**
@@ -1057,10 +1051,10 @@ int set_trigger_filter(char *filter_str,
s = strsep(&filter_str, " \t");
if (!strlen(s) || strcmp(s, "if") != 0)
- goto out;
+ return ret;
if (!filter_str)
- goto out;
+ return ret;
/* The filter is for the 'trigger' event, not the triggered event */
ret = create_event_filter(file->tr, file->event_call,
@@ -1104,7 +1098,6 @@ int set_trigger_filter(char *filter_str,
ret = -ENOMEM;
}
}
- out:
return ret;
}
@@ -1772,7 +1765,7 @@ int event_enable_trigger_parse(struct event_command *cmd_ops,
ret = -EINVAL;
event_enable_file = find_event_file(tr, system, event);
if (!event_enable_file)
- goto out;
+ return ret;
#ifdef CONFIG_HIST_TRIGGERS
hist = ((strcmp(cmd, ENABLE_HIST_STR) == 0) ||
@@ -1787,7 +1780,7 @@ int event_enable_trigger_parse(struct event_command *cmd_ops,
enable_data = kzalloc(sizeof(*enable_data), GFP_KERNEL);
if (!enable_data)
- goto out;
+ return ret;
enable_data->hist = hist;
enable_data->enable = enable;
@@ -1796,7 +1789,7 @@ int event_enable_trigger_parse(struct event_command *cmd_ops,
trigger_data = trigger_data_alloc(cmd_ops, cmd, param, enable_data);
if (!trigger_data) {
kfree(enable_data);
- goto out;
+ return ret;
}
if (remove) {
@@ -1804,7 +1797,7 @@ int event_enable_trigger_parse(struct event_command *cmd_ops,
kfree(trigger_data);
kfree(enable_data);
ret = 0;
- goto out;
+ return ret;
}
/* Up the trigger_data count to make sure nothing frees it on failure */
@@ -1834,7 +1827,6 @@ int event_enable_trigger_parse(struct event_command *cmd_ops,
goto out_disable;
event_trigger_free(trigger_data);
- out:
return ret;
out_disable:
trace_event_enable_disable(event_enable_file, 0, 1);
@@ -1845,7 +1837,7 @@ int event_enable_trigger_parse(struct event_command *cmd_ops,
event_trigger_free(trigger_data);
kfree(enable_data);
- goto out;
+ return ret;
}
int event_enable_register_trigger(char *glob,
@@ -1865,15 +1857,14 @@ int event_enable_register_trigger(char *glob,
(test->cmd_ops->trigger_type ==
data->cmd_ops->trigger_type) &&
(test_enable_data->file == enable_data->file)) {
- ret = -EEXIST;
- goto out;
+ return -EEXIST;
}
}
if (data->ops->init) {
ret = data->ops->init(data);
if (ret < 0)
- goto out;
+ return ret;
}
list_add_rcu(&data->list, &file->triggers);
@@ -1884,7 +1875,6 @@ int event_enable_register_trigger(char *glob,
list_del_rcu(&data->list);
update_cond_flag(file);
}
-out:
return ret;
}
--
2.47.2
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH 0/3] tracing: Some cleanups of event trigger code
2025-05-07 14:53 [PATCH 0/3] tracing: Some cleanups of event trigger code Steven Rostedt
` (2 preceding siblings ...)
2025-05-07 14:53 ` [PATCH 3/3] tracing: Remove unnecessary "goto out" that simply returns ret is trigger code Steven Rostedt
@ 2025-05-12 20:47 ` Tom Zanussi
2025-05-12 20:50 ` Steven Rostedt
3 siblings, 1 reply; 6+ messages in thread
From: Tom Zanussi @ 2025-05-12 20:47 UTC (permalink / raw)
To: Steven Rostedt, linux-kernel, linux-trace-kernel
Cc: Masami Hiramatsu, Mark Rutland, Mathieu Desnoyers, Andrew Morton
Hi Steve,
On Wed, 2025-05-07 at 10:53 -0400, Steven Rostedt wrote:
> These are minor clean ups of the trace_events_trigger code.
>
> - Rename event_trigger_alloc() to trigger_data_alloc() as it
> is supposed to be freed by trigger_data_free().
>
> - Remove unneeded goto outs
>
> - Add consistent cleanup in event_trigger_parse()
>
>
> Miaoqian Lin (1):
> tracing: Fix error handling in event_trigger_parse()
>
> Steven Rostedt (2):
> tracing: Rename event_trigger_alloc() to trigger_data_alloc()
> tracing: Remove unnecessary "goto out" that simply returns ret
> is trigger code
>
These all look right to me, and were probably the original intent.
For all 3,
Reviewed-by: Tom Zanussi <zanussi@kernel.org>
Thanks,
Tom
> ----
> kernel/trace/trace.h | 8 ++---
> kernel/trace/trace_events_hist.c | 2 +-
> kernel/trace/trace_events_trigger.c | 64 ++++++++++++++++-----------
> ----------
> 3 files changed, 31 insertions(+), 43 deletions(-)
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 0/3] tracing: Some cleanups of event trigger code
2025-05-12 20:47 ` [PATCH 0/3] tracing: Some cleanups of event " Tom Zanussi
@ 2025-05-12 20:50 ` Steven Rostedt
0 siblings, 0 replies; 6+ messages in thread
From: Steven Rostedt @ 2025-05-12 20:50 UTC (permalink / raw)
To: Tom Zanussi
Cc: linux-kernel, linux-trace-kernel, Masami Hiramatsu, Mark Rutland,
Mathieu Desnoyers, Andrew Morton
On Mon, 12 May 2025 15:47:53 -0500
Tom Zanussi <zanussi@kernel.org> wrote:
> > Miaoqian Lin (1):
> > tracing: Fix error handling in event_trigger_parse()
> >
> > Steven Rostedt (2):
> > tracing: Rename event_trigger_alloc() to trigger_data_alloc()
> > tracing: Remove unnecessary "goto out" that simply returns ret
> > is trigger code
> >
>
> These all look right to me, and were probably the original intent.
>
> For all 3,
>
> Reviewed-by: Tom Zanussi <zanussi@kernel.org>
Thanks Tom!
-- Steve
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2025-05-12 20:50 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-05-07 14:53 [PATCH 0/3] tracing: Some cleanups of event trigger code Steven Rostedt
2025-05-07 14:53 ` [PATCH 1/3] tracing: Rename event_trigger_alloc() to trigger_data_alloc() Steven Rostedt
2025-05-07 14:53 ` [PATCH 2/3] tracing: Fix error handling in event_trigger_parse() Steven Rostedt
2025-05-07 14:53 ` [PATCH 3/3] tracing: Remove unnecessary "goto out" that simply returns ret is trigger code Steven Rostedt
2025-05-12 20:47 ` [PATCH 0/3] tracing: Some cleanups of event " Tom Zanussi
2025-05-12 20:50 ` Steven Rostedt
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).