diff options
author | Tom Zanussi <tzanussi@gmail.com> | 2009-04-17 01:27:08 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2009-04-17 12:28:27 -0400 |
commit | ac1adc55fc71c7515caa2eb0e63e49b3d1c6a47c (patch) | |
tree | 7a97cf9512572c53d0802725f8e0ad6a2d4b2204 /kernel/trace/trace_events.c | |
parent | 46de405f25f1d9fa73b657ffbb752aa0cc87a91d (diff) |
tracing/filters: add filter_mutex to protect filter predicates
This patch adds a filter_mutex to prevent the filter predicates from
being accessed concurrently by various external functions.
It's based on a previous patch by Li Zefan:
"[PATCH 7/7] tracing/filters: make filter preds RCU safe"
v2 changes:
- fixed wrong value returned in a add_subsystem_pred() failure case
noticed by Li Zefan.
[ Impact: fix trace filter corruption/crashes on parallel access ]
Signed-off-by: Tom Zanussi <tzanussi@gmail.com>
Reviewed-by: Li Zefan <lizf@cn.fujitsu.com>
Tested-by: Li Zefan <lizf@cn.fujitsu.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: paulmck@linux.vnet.ibm.com
LKML-Reference: <1239946028.6639.13.camel@tropicana>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'kernel/trace/trace_events.c')
-rw-r--r-- | kernel/trace/trace_events.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c index 1137f951be42..64f9d6d2735b 100644 --- a/kernel/trace/trace_events.c +++ b/kernel/trace/trace_events.c | |||
@@ -488,7 +488,7 @@ event_filter_read(struct file *filp, char __user *ubuf, size_t cnt, | |||
488 | 488 | ||
489 | trace_seq_init(s); | 489 | trace_seq_init(s); |
490 | 490 | ||
491 | filter_print_preds(call->preds, call->n_preds, s); | 491 | filter_print_preds(call, s); |
492 | r = simple_read_from_buffer(ubuf, cnt, ppos, s->buffer, s->len); | 492 | r = simple_read_from_buffer(ubuf, cnt, ppos, s->buffer, s->len); |
493 | 493 | ||
494 | kfree(s); | 494 | kfree(s); |
@@ -558,7 +558,7 @@ subsystem_filter_read(struct file *filp, char __user *ubuf, size_t cnt, | |||
558 | 558 | ||
559 | trace_seq_init(s); | 559 | trace_seq_init(s); |
560 | 560 | ||
561 | filter_print_preds(system->preds, system->n_preds, s); | 561 | filter_print_subsystem_preds(system, s); |
562 | r = simple_read_from_buffer(ubuf, cnt, ppos, s->buffer, s->len); | 562 | r = simple_read_from_buffer(ubuf, cnt, ppos, s->buffer, s->len); |
563 | 563 | ||
564 | kfree(s); | 564 | kfree(s); |