From: Masami Hiramatsu (Google) <mhira...@kernel.org>

Use guard() or scoped_guard() in eprobe events for critical sections
rather than discrete lock/unlock pairs.

Signed-off-by: Masami Hiramatsu (Google) <mhira...@kernel.org>
---
 kernel/trace/trace_eprobe.c |   36 +++++++++++++++++-------------------
 1 file changed, 17 insertions(+), 19 deletions(-)

diff --git a/kernel/trace/trace_eprobe.c b/kernel/trace/trace_eprobe.c
index be8be0c1aaf0..82fd637cfc19 100644
--- a/kernel/trace/trace_eprobe.c
+++ b/kernel/trace/trace_eprobe.c
@@ -917,10 +917,10 @@ static int __trace_eprobe_create(int argc, const char 
*argv[])
                goto error;
        }
 
-       mutex_lock(&event_mutex);
-       event_call = find_and_get_event(sys_name, sys_event);
-       ep = alloc_event_probe(group, event, event_call, argc - 2);
-       mutex_unlock(&event_mutex);
+       scoped_guard(mutex, &event_mutex) {
+               event_call = find_and_get_event(sys_name, sys_event);
+               ep = alloc_event_probe(group, event, event_call, argc - 2);
+       }
 
        if (IS_ERR(ep)) {
                ret = PTR_ERR(ep);
@@ -952,23 +952,21 @@ static int __trace_eprobe_create(int argc, const char 
*argv[])
        if (ret < 0)
                goto error;
        init_trace_eprobe_call(ep);
-       mutex_lock(&event_mutex);
-       ret = trace_probe_register_event_call(&ep->tp);
-       if (ret) {
-               if (ret == -EEXIST) {
-                       trace_probe_log_set_index(0);
-                       trace_probe_log_err(0, EVENT_EXIST);
+       scoped_guard(mutex, &event_mutex) {
+               ret = trace_probe_register_event_call(&ep->tp);
+               if (ret) {
+                       if (ret == -EEXIST) {
+                               trace_probe_log_set_index(0);
+                               trace_probe_log_err(0, EVENT_EXIST);
+                       }
+                       goto error;
+               }
+               ret = dyn_event_add(&ep->devent, &ep->tp.event->call);
+               if (ret < 0) {
+                       trace_probe_unregister_event_call(&ep->tp);
+                       goto error;
                }
-               mutex_unlock(&event_mutex);
-               goto error;
-       }
-       ret = dyn_event_add(&ep->devent, &ep->tp.event->call);
-       if (ret < 0) {
-               trace_probe_unregister_event_call(&ep->tp);
-               mutex_unlock(&event_mutex);
-               goto error;
        }
-       mutex_unlock(&event_mutex);
        return ret;
 parse_error:
        ret = -EINVAL;


Reply via email to