]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
tracing: Switch trace_events_hist.c code over to use guard()
authorSteven Rostedt <rostedt@goodmis.org>
Thu, 19 Dec 2024 20:12:05 +0000 (15:12 -0500)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 10 Apr 2025 12:37:41 +0000 (14:37 +0200)
[ Upstream commit 2b36a97aeeb71b1e4a48bfedc7f21f44aeb1e6fb ]

There are a couple functions in trace_events_hist.c that have "goto out" or
equivalent on error in order to release locks that were taken. This can be
error prone or just simply make the code more complex.

Switch every location that ends with unlocking a mutex on error over to
using the guard(mutex)() infrastructure to let the compiler worry about
releasing locks. This makes the code easier to read and understand.

Cc: Masami Hiramatsu <mhiramat@kernel.org>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: https://lore.kernel.org/20241219201345.694601480@goodmis.org
Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
Stable-dep-of: 0b4ffbe4888a ("tracing: Correct the refcount if the hist/hist_debug file fails to open")
Signed-off-by: Sasha Levin <sashal@kernel.org>
kernel/trace/trace_events_hist.c

index 604d63380a90b12e9b9f2efe6c7009503e24601e..755db2451fb2d499e61bdbee4e7192901218ec76 100644 (file)
@@ -5605,25 +5605,19 @@ static int hist_show(struct seq_file *m, void *v)
 {
        struct event_trigger_data *data;
        struct trace_event_file *event_file;
-       int n = 0, ret = 0;
+       int n = 0;
 
-       mutex_lock(&event_mutex);
+       guard(mutex)(&event_mutex);
 
        event_file = event_file_file(m->private);
-       if (unlikely(!event_file)) {
-               ret = -ENODEV;
-               goto out_unlock;
-       }
+       if (unlikely(!event_file))
+               return -ENODEV;
 
        list_for_each_entry(data, &event_file->triggers, list) {
                if (data->cmd_ops->trigger_type == ETT_EVENT_HIST)
                        hist_trigger_show(m, data, n++);
        }
-
- out_unlock:
-       mutex_unlock(&event_mutex);
-
-       return ret;
+       return 0;
 }
 
 static int event_hist_open(struct inode *inode, struct file *file)
@@ -5884,25 +5878,19 @@ static int hist_debug_show(struct seq_file *m, void *v)
 {
        struct event_trigger_data *data;
        struct trace_event_file *event_file;
-       int n = 0, ret = 0;
+       int n = 0;
 
-       mutex_lock(&event_mutex);
+       guard(mutex)(&event_mutex);
 
        event_file = event_file_file(m->private);
-       if (unlikely(!event_file)) {
-               ret = -ENODEV;
-               goto out_unlock;
-       }
+       if (unlikely(!event_file))
+               return -ENODEV;
 
        list_for_each_entry(data, &event_file->triggers, list) {
                if (data->cmd_ops->trigger_type == ETT_EVENT_HIST)
                        hist_trigger_debug_show(m, data, n++);
        }
-
- out_unlock:
-       mutex_unlock(&event_mutex);
-
-       return ret;
+       return 0;
 }
 
 static int event_hist_debug_open(struct inode *inode, struct file *file)