aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/trace
diff options
context:
space:
mode:
authorSteven Rostedt <srostedt@redhat.com>2011-01-27 22:33:26 -0500
committerSteven Rostedt <rostedt@goodmis.org>2011-02-07 20:56:17 -0500
commit6d54057d76e25c91165cda0e6e007f1811faa2be (patch)
tree5f797433b9604e645e068a85c6f708db8b9dfbcd /kernel/trace
parent075de90c46562de1435db16c2129ec4ff92e5bd2 (diff)
tracing/filter: Have no filter return a match
The n_preds field of a file can change at anytime, and even can become zero, just as the filter is about to be processed by an event. In the case that is zero on entering the filter, return 1, telling the caller the event matchs and should be trace. Also use a variable and assign it with ACCESS_ONCE() such that the count stays consistent within the function. Cc: Tom Zanussi <tzanussi@gmail.com> Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
Diffstat (limited to 'kernel/trace')
-rw-r--r--kernel/trace/trace_events_filter.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/kernel/trace/trace_events_filter.c b/kernel/trace/trace_events_filter.c
index 36d40104b17f..7275f0310ed8 100644
--- a/kernel/trace/trace_events_filter.c
+++ b/kernel/trace/trace_events_filter.c
@@ -383,9 +383,14 @@ int filter_match_preds(struct event_filter *filter, void *rec)
383 int match, top = 0, val1 = 0, val2 = 0; 383 int match, top = 0, val1 = 0, val2 = 0;
384 int stack[MAX_FILTER_PRED]; 384 int stack[MAX_FILTER_PRED];
385 struct filter_pred *pred; 385 struct filter_pred *pred;
386 int n_preds = ACCESS_ONCE(filter->n_preds);
386 int i; 387 int i;
387 388
388 for (i = 0; i < filter->n_preds; i++) { 389 /* no filter is considered a match */
390 if (!n_preds)
391 return 1;
392
393 for (i = 0; i < n_preds; i++) {
389 pred = filter->preds[i]; 394 pred = filter->preds[i];
390 if (!pred->pop_n) { 395 if (!pred->pop_n) {
391 match = pred->fn(pred, rec, val1, val2); 396 match = pred->fn(pred, rec, val1, val2);