From: Masami Hiramatsu (Google) <mhira...@kernel.org> Use __free() for trace_probe_log_clear() to cleanup error log interface.
Signed-off-by: Masami Hiramatsu (Google) <mhira...@kernel.org> --- kernel/trace/trace_eprobe.c | 5 ++--- kernel/trace/trace_probe.c | 3 ++- kernel/trace/trace_probe.h | 4 +++- kernel/trace/trace_uprobe.c | 6 ++---- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/kernel/trace/trace_eprobe.c b/kernel/trace/trace_eprobe.c index a1d402124836..aaba765d54cf 100644 --- a/kernel/trace/trace_eprobe.c +++ b/kernel/trace/trace_eprobe.c @@ -874,6 +874,7 @@ static int __trace_eprobe_create(int argc, const char *argv[]) * Fetch args (no space): * <name>=$<field>[:TYPE] */ + const char *trlog __free(trace_probe_log_clear) = NULL; const char *event = NULL, *group = EPROBE_EVENT_SYSTEM; const char *sys_event = NULL, *sys_name = NULL; struct trace_event_call *event_call; @@ -887,7 +888,7 @@ static int __trace_eprobe_create(int argc, const char *argv[]) if (argc < 2 || argv[0][0] != 'e') return -ECANCELED; - trace_probe_log_init("event_probe", argc, argv); + trlog = trace_probe_log_init("event_probe", argc, argv); event = strchr(&argv[0][1], ':'); if (event) { @@ -987,7 +988,6 @@ static int __trace_eprobe_create(int argc, const char *argv[]) goto error; } } - trace_probe_log_clear(); return ret; mem_error: @@ -996,7 +996,6 @@ static int __trace_eprobe_create(int argc, const char *argv[]) parse_error: ret = -EINVAL; error: - trace_probe_log_clear(); trace_event_probe_cleanup(ep); return ret; } diff --git a/kernel/trace/trace_probe.c b/kernel/trace/trace_probe.c index 5cbdc423afeb..5b92376a58fc 100644 --- a/kernel/trace/trace_probe.c +++ b/kernel/trace/trace_probe.c @@ -156,7 +156,7 @@ static const struct fetch_type *find_fetch_type(const char *type, unsigned long static struct trace_probe_log trace_probe_log; extern struct mutex dyn_event_ops_mutex; -void trace_probe_log_init(const char *subsystem, int argc, const char **argv) +const char *trace_probe_log_init(const char *subsystem, int argc, const char **argv) { lockdep_assert_held(&dyn_event_ops_mutex); @@ -164,6 +164,7 @@ void trace_probe_log_init(const char *subsystem, int argc, const char **argv) trace_probe_log.argc = argc; trace_probe_log.argv = argv; trace_probe_log.index = 0; + return subsystem; } void trace_probe_log_clear(void) diff --git a/kernel/trace/trace_probe.h b/kernel/trace/trace_probe.h index 842383fbc03b..76bf2dee8071 100644 --- a/kernel/trace/trace_probe.h +++ b/kernel/trace/trace_probe.h @@ -573,11 +573,13 @@ struct trace_probe_log { int index; }; -void trace_probe_log_init(const char *subsystem, int argc, const char **argv); +const char *trace_probe_log_init(const char *subsystem, int argc, const char **argv); void trace_probe_log_set_index(int index); void trace_probe_log_clear(void); void __trace_probe_log_err(int offset, int err); +DEFINE_FREE(trace_probe_log_clear, const char *, if (_T) trace_probe_log_clear()) + #define trace_probe_log_err(offs, err) \ __trace_probe_log_err(offs, TP_ERR_##err) diff --git a/kernel/trace/trace_uprobe.c b/kernel/trace/trace_uprobe.c index 8b0bcc0d8f41..722316b3dc16 100644 --- a/kernel/trace/trace_uprobe.c +++ b/kernel/trace/trace_uprobe.c @@ -539,6 +539,7 @@ static int register_trace_uprobe(struct trace_uprobe *tu) */ static int __trace_uprobe_create(int argc, const char **argv) { + const char *trlog __free(trace_probe_log_clear) = NULL; const char *event = NULL, *group = UPROBE_EVENT_SYSTEM; char *arg, *filename, *rctr, *rctr_end, *tmp; unsigned long offset, ref_ctr_offset; @@ -565,7 +566,7 @@ static int __trace_uprobe_create(int argc, const char **argv) if (argc < 2) return -ECANCELED; - trace_probe_log_init("trace_uprobe", argc, argv); + trlog = trace_probe_log_init("trace_uprobe", argc, argv); if (argc - 2 > MAX_TRACE_ARGS) { trace_probe_log_set_index(2); @@ -597,7 +598,6 @@ static int __trace_uprobe_create(int argc, const char **argv) if (ret) { trace_probe_log_err(0, FILE_NOT_FOUND); kfree(filename); - trace_probe_log_clear(); return ret; } if (!d_is_reg(path.dentry)) { @@ -728,14 +728,12 @@ static int __trace_uprobe_create(int argc, const char **argv) error: free_trace_uprobe(tu); out: - trace_probe_log_clear(); return ret; fail_mem: ret = -ENOMEM; fail_address_parse: - trace_probe_log_clear(); path_put(&path); kfree(filename);