]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
tracing: Fix initialization failure path in tracing_set_tracer()
authorAnton Vorontsov <anton.vorontsov@linaro.org>
Tue, 10 Jul 2012 00:10:39 +0000 (17:10 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 17 Jul 2012 16:50:53 +0000 (09:50 -0700)
If tracer->init() fails, current code will leave current_tracer pointing
to an unusable tracer, which at best makes 'current_tracer' report
inaccurate value.

Fix the issue by pointing current_tracer to nop tracer, and only update
current_tracer with the new one after all the initialization succeeds.

Signed-off-by: Anton Vorontsov <anton.vorontsov@linaro.org>
Acked-by: Steven Rostedt <rostedt@goodmis.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
kernel/trace/trace.c

index 49249c28690dbb21b6914e2907b16af56e1094c9..44ee11e31b820b9c6a507a8c6ea4cfb81abc9589 100644 (file)
@@ -3172,10 +3172,10 @@ static int tracing_set_tracer(const char *buf)
        }
        destroy_trace_option_files(topts);
 
-       current_trace = t;
+       current_trace = &nop_trace;
 
-       topts = create_trace_option_files(current_trace);
-       if (current_trace->use_max_tr) {
+       topts = create_trace_option_files(t);
+       if (t->use_max_tr) {
                int cpu;
                /* we need to make per cpu buffer sizes equivalent */
                for_each_tracing_cpu(cpu) {
@@ -3195,6 +3195,7 @@ static int tracing_set_tracer(const char *buf)
                        goto out;
        }
 
+       current_trace = t;
        trace_branch_enable(tr);
  out:
        mutex_unlock(&trace_types_lock);