Merge tag 'armsoc-defconfig' of git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc
[linux-2.6-microblaze.git] / kernel / trace / trace_stat.c
index 874f127..d1fa197 100644 (file)
@@ -280,18 +280,22 @@ static int tracing_stat_init(void)
 
        d_tracing = tracing_init_dentry();
        if (IS_ERR(d_tracing))
-               return 0;
+               return -ENODEV;
 
        stat_dir = tracefs_create_dir("trace_stat", d_tracing);
-       if (!stat_dir)
+       if (!stat_dir) {
                pr_warn("Could not create tracefs 'trace_stat' entry\n");
+               return -ENOMEM;
+       }
        return 0;
 }
 
 static int init_stat_file(struct stat_session *session)
 {
-       if (!stat_dir && tracing_stat_init())
-               return -ENODEV;
+       int ret;
+
+       if (!stat_dir && (ret = tracing_stat_init()))
+               return ret;
 
        session->file = tracefs_create_file(session->ts->name, 0644,
                                            stat_dir,
@@ -304,7 +308,7 @@ static int init_stat_file(struct stat_session *session)
 int register_stat_tracer(struct tracer_stat *trace)
 {
        struct stat_session *session, *node;
-       int ret;
+       int ret = -EINVAL;
 
        if (!trace)
                return -EINVAL;
@@ -315,17 +319,15 @@ int register_stat_tracer(struct tracer_stat *trace)
        /* Already registered? */
        mutex_lock(&all_stat_sessions_mutex);
        list_for_each_entry(node, &all_stat_sessions, session_list) {
-               if (node->ts == trace) {
-                       mutex_unlock(&all_stat_sessions_mutex);
-                       return -EINVAL;
-               }
+               if (node->ts == trace)
+                       goto out;
        }
-       mutex_unlock(&all_stat_sessions_mutex);
 
+       ret = -ENOMEM;
        /* Init the session */
        session = kzalloc(sizeof(*session), GFP_KERNEL);
        if (!session)
-               return -ENOMEM;
+               goto out;
 
        session->ts = trace;
        INIT_LIST_HEAD(&session->session_list);
@@ -334,15 +336,16 @@ int register_stat_tracer(struct tracer_stat *trace)
        ret = init_stat_file(session);
        if (ret) {
                destroy_session(session);
-               return ret;
+               goto out;
        }
 
+       ret = 0;
        /* Register */
-       mutex_lock(&all_stat_sessions_mutex);
        list_add_tail(&session->session_list, &all_stat_sessions);
+ out:
        mutex_unlock(&all_stat_sessions_mutex);
 
-       return 0;
+       return ret;
 }
 
 void unregister_stat_tracer(struct tracer_stat *trace)