Move the event_define_fields() call in event_create_dir() before the
eventfs directory creation. Previously, a failure after directory
creation wouldn't clean up eventfs_inode because the error path didn't
call eventfs_remove_dir(). This eliminates the need to clean up the
eventfs directories if event_define_fields() fails.

Signed-off-by: Anubhav Shelat <[email protected]>
---
 kernel/trace/trace_events.c | 13 +++++++------
 1 file changed, 7 insertions(+), 6 deletions(-)

diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c
index c46e623e7e0d..ddb6932a3ee7 100644
--- a/kernel/trace/trace_events.c
+++ b/kernel/trace/trace_events.c
@@ -3190,6 +3190,13 @@ event_create_dir(struct eventfs_inode *parent, struct 
trace_event_file *file)
        if (WARN_ON_ONCE(strcmp(call->class->system, TRACE_SYSTEM) == 0))
                return -ENODEV;
 
+       ret = event_define_fields(call);
+       if (ret < 0) {
+               pr_warn("Could not initialize trace point events/%s\n",
+                       trace_event_name(call));
+               return ret;
+       }
+
        e_events = event_subsystem_dir(tr, call->class->system, file, parent);
        if (!e_events)
                return -ENOMEM;
@@ -3208,12 +3215,6 @@ event_create_dir(struct eventfs_inode *parent, struct 
trace_event_file *file)
 
        file->ei = ei;
 
-       ret = event_define_fields(call);
-       if (ret < 0) {
-               pr_warn("Could not initialize trace point events/%s\n", name);
-               return ret;
-       }
-
        /* Gets decremented on freeing of the "enable" file */
        event_file_get(file);
 
-- 
2.54.0


Reply via email to