aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/trace/trace.c
diff options
context:
space:
mode:
authorJiri Olsa <jolsa@redhat.com>2012-04-25 04:23:39 -0400
committerSteven Rostedt <rostedt@goodmis.org>2012-05-08 21:04:12 -0400
commit50e18b94c695644d824381e7574b9c44acc25ffe (patch)
tree8e323cd188dfdf4882e963812a6b9caf8905cac0 /kernel/trace/trace.c
parentb02ee9a33b65bcc4ad13c12a0b04afdaab3ddd8d (diff)
tracing: Use seq_*_private interface for some seq files
It's appropriate to use __seq_open_private interface to open some of trace seq files, because it covers all steps we are duplicating in tracing code - zallocating the iterator and setting it as seq_file's private. Using this for following files: trace available_filter_functions enabled_functions Link: http://lkml.kernel.org/r/1335342219-2782-5-git-send-email-jolsa@redhat.com Signed-off-by: Jiri Olsa <jolsa@redhat.com> [ Fixed warnings for: kernel/trace/trace.c: In function '__tracing_open': kernel/trace/trace.c:2418:11: warning: unused variable 'ret' [-Wunused-variable] kernel/trace/trace.c:2417:19: warning: unused variable 'm' [-Wunused-variable] ] Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
Diffstat (limited to 'kernel/trace/trace.c')
-rw-r--r--kernel/trace/trace.c30
1 files changed, 5 insertions, 25 deletions
diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
index f11a285ee5bb..4fb10ef727d3 100644
--- a/kernel/trace/trace.c
+++ b/kernel/trace/trace.c
@@ -2413,15 +2413,13 @@ static struct trace_iterator *
2413__tracing_open(struct inode *inode, struct file *file) 2413__tracing_open(struct inode *inode, struct file *file)
2414{ 2414{
2415 long cpu_file = (long) inode->i_private; 2415 long cpu_file = (long) inode->i_private;
2416 void *fail_ret = ERR_PTR(-ENOMEM);
2417 struct trace_iterator *iter; 2416 struct trace_iterator *iter;
2418 struct seq_file *m; 2417 int cpu;
2419 int cpu, ret;
2420 2418
2421 if (tracing_disabled) 2419 if (tracing_disabled)
2422 return ERR_PTR(-ENODEV); 2420 return ERR_PTR(-ENODEV);
2423 2421
2424 iter = kzalloc(sizeof(*iter), GFP_KERNEL); 2422 iter = __seq_open_private(file, &tracer_seq_ops, sizeof(*iter));
2425 if (!iter) 2423 if (!iter)
2426 return ERR_PTR(-ENOMEM); 2424 return ERR_PTR(-ENOMEM);
2427 2425
@@ -2478,32 +2476,15 @@ __tracing_open(struct inode *inode, struct file *file)
2478 tracing_iter_reset(iter, cpu); 2476 tracing_iter_reset(iter, cpu);
2479 } 2477 }
2480 2478
2481 ret = seq_open(file, &tracer_seq_ops);
2482 if (ret < 0) {
2483 fail_ret = ERR_PTR(ret);
2484 goto fail_buffer;
2485 }
2486
2487 m = file->private_data;
2488 m->private = iter;
2489
2490 mutex_unlock(&trace_types_lock); 2479 mutex_unlock(&trace_types_lock);
2491 2480
2492 return iter; 2481 return iter;
2493 2482
2494 fail_buffer:
2495 for_each_tracing_cpu(cpu) {
2496 if (iter->buffer_iter[cpu])
2497 ring_buffer_read_finish(iter->buffer_iter[cpu]);
2498 }
2499 free_cpumask_var(iter->started);
2500 tracing_start();
2501 fail: 2483 fail:
2502 mutex_unlock(&trace_types_lock); 2484 mutex_unlock(&trace_types_lock);
2503 kfree(iter->trace); 2485 kfree(iter->trace);
2504 kfree(iter); 2486 seq_release_private(inode, file);
2505 2487 return ERR_PTR(-ENOMEM);
2506 return fail_ret;
2507} 2488}
2508 2489
2509int tracing_open_generic(struct inode *inode, struct file *filp) 2490int tracing_open_generic(struct inode *inode, struct file *filp)
@@ -2539,11 +2520,10 @@ static int tracing_release(struct inode *inode, struct file *file)
2539 tracing_start(); 2520 tracing_start();
2540 mutex_unlock(&trace_types_lock); 2521 mutex_unlock(&trace_types_lock);
2541 2522
2542 seq_release(inode, file);
2543 mutex_destroy(&iter->mutex); 2523 mutex_destroy(&iter->mutex);
2544 free_cpumask_var(iter->started); 2524 free_cpumask_var(iter->started);
2545 kfree(iter->trace); 2525 kfree(iter->trace);
2546 kfree(iter); 2526 seq_release_private(inode, file);
2547 return 0; 2527 return 0;
2548} 2528}
2549 2529