aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/trace/ftrace.c
diff options
context:
space:
mode:
authorSteven Rostedt <srostedt@redhat.com>2009-02-13 20:53:42 -0500
committerSteven Rostedt <srostedt@redhat.com>2009-02-16 17:03:49 -0500
commite68746a271eb3393a2183840be9e903caddf765b (patch)
tree106ea87792837ccee1476687d9f9a067f96488a9 /kernel/trace/ftrace.c
parent64e7c440618998fd69eee6ab490b042d12248021 (diff)
ftrace: enable filtering only when a function is filtered on
Impact: fix to prevent empty set_ftrace_filter and no ftrace output The function filter is used to only trace a given set of functions. The filter is enabled when a function name is echoed into the set_ftrace_filter file. But if the name has a typo and the function is not found, the filter is enabled, but no function is listed. This makes a confusing situation where set_ftrace_filter is empty but no functions ever get enabled for tracing. For example: # cat /debug/tracing/set_ftrace_filter #### all functions enabled #### # echo bad_name > set_ftrace_filter # cat /debug/tracing/set_ftrace_filter # echo function > current_tracer # cat trace # tracer: nop # # TASK-PID CPU# TIMESTAMP FUNCTION # | | | | | This patch changes that to only enable filtering if a function is set to be filtered on. Now, the filter is not enabled if a bad name is echoed into set_ftrace_filter. Signed-off-by: Steven Rostedt <srostedt@redhat.com>
Diffstat (limited to 'kernel/trace/ftrace.c')
-rw-r--r--kernel/trace/ftrace.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c
index 9e60ae423af9..340f88b68d9e 100644
--- a/kernel/trace/ftrace.c
+++ b/kernel/trace/ftrace.c
@@ -1153,8 +1153,6 @@ static void ftrace_match_records(char *buff, int len, int enable)
1153 1153
1154 /* should not be called from interrupt context */ 1154 /* should not be called from interrupt context */
1155 spin_lock(&ftrace_lock); 1155 spin_lock(&ftrace_lock);
1156 if (enable)
1157 ftrace_filtered = 1;
1158 do_for_each_ftrace_rec(pg, rec) { 1156 do_for_each_ftrace_rec(pg, rec) {
1159 1157
1160 if (rec->flags & FTRACE_FL_FAILED) 1158 if (rec->flags & FTRACE_FL_FAILED)
@@ -1166,7 +1164,12 @@ static void ftrace_match_records(char *buff, int len, int enable)
1166 else 1164 else
1167 rec->flags |= flag; 1165 rec->flags |= flag;
1168 } 1166 }
1169 1167 /*
1168 * Only enable filtering if we have a function that
1169 * is filtered on.
1170 */
1171 if (enable && (rec->flags & FTRACE_FL_FILTER))
1172 ftrace_filtered = 1;
1170 } while_for_each_ftrace_rec(); 1173 } while_for_each_ftrace_rec();
1171 spin_unlock(&ftrace_lock); 1174 spin_unlock(&ftrace_lock);
1172} 1175}
@@ -1217,9 +1220,6 @@ static void ftrace_match_module_records(char *buff, char *mod, int enable)
1217 1220
1218 /* should not be called from interrupt context */ 1221 /* should not be called from interrupt context */
1219 spin_lock(&ftrace_lock); 1222 spin_lock(&ftrace_lock);
1220 if (enable)
1221 ftrace_filtered = 1;
1222
1223 do_for_each_ftrace_rec(pg, rec) { 1223 do_for_each_ftrace_rec(pg, rec) {
1224 1224
1225 if (rec->flags & FTRACE_FL_FAILED) 1225 if (rec->flags & FTRACE_FL_FAILED)
@@ -1232,6 +1232,8 @@ static void ftrace_match_module_records(char *buff, char *mod, int enable)
1232 else 1232 else
1233 rec->flags |= flag; 1233 rec->flags |= flag;
1234 } 1234 }
1235 if (enable && (rec->flags & FTRACE_FL_FILTER))
1236 ftrace_filtered = 1;
1235 1237
1236 } while_for_each_ftrace_rec(); 1238 } while_for_each_ftrace_rec();
1237 spin_unlock(&ftrace_lock); 1239 spin_unlock(&ftrace_lock);