diff options
author | Xiao Guangrong <xiaoguangrong@cn.fujitsu.com> | 2009-07-21 23:23:41 -0400 |
---|---|---|
committer | Steven Rostedt <rostedt@goodmis.org> | 2009-07-23 20:52:05 -0400 |
commit | 8e068542a8d9efec55126284d2f5cb32f003d507 (patch) | |
tree | b3a75ae9a2dd27596bda9f1c7be1cd5ce0ebacfe /kernel/trace/trace_ksym.c | |
parent | d857ace143df3884954887e1899a65831ca72ece (diff) |
tracing/ksym_tracer: fix write operation of ksym_trace_filter
This patch fix 2 bugs:
- fix the return value of ksym_trace_filter_write() when we want to
clear symbol in ksym_trace_filter file
for example:
# echo global_trace:rw- > /debug/tracing/ksym_trace_filter
# echo global_trace:--- > /debug/tracing/ksym_trace_filter
-bash: echo: write error: Invalid argument
# cat /debug/tracing/ksym_trace_filter
#
We want to clear 'global_trace' in ksym_trace_filter, it complain
with "Invalid argument", but the operation is successful
- the "r--" access types is not allowed, but ksym_trace_filter file think
it OK
for example:
# echo ksym_tracer_mutex:r-- > ksym_trace_filter
-bash: echo: write error: Resource temporarily unavailable
# dmesg
ksym_tracer request failed. Try again later!!
The error occur at register_kernel_hw_breakpoint(), but It's should
at access types parser
Signed-off-by: Xiao Guangrong <xiaoguangrong@cn.fujitsu.com>
LKML-Reference: <4A66863D.5090802@cn.fujitsu.com>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
Diffstat (limited to 'kernel/trace/trace_ksym.c')
-rw-r--r-- | kernel/trace/trace_ksym.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/kernel/trace/trace_ksym.c b/kernel/trace/trace_ksym.c index fbf3a8e13bc5..cd5cb656c3d2 100644 --- a/kernel/trace/trace_ksym.c +++ b/kernel/trace/trace_ksym.c | |||
@@ -135,6 +135,9 @@ static int ksym_trace_get_access_type(char *str) | |||
135 | case 6: | 135 | case 6: |
136 | access = HW_BREAKPOINT_RW; | 136 | access = HW_BREAKPOINT_RW; |
137 | break; | 137 | break; |
138 | case 4: | ||
139 | access = -EINVAL; | ||
140 | break; | ||
138 | case 2: | 141 | case 2: |
139 | access = HW_BREAKPOINT_WRITE; | 142 | access = HW_BREAKPOINT_WRITE; |
140 | break; | 143 | break; |
@@ -312,6 +315,7 @@ static ssize_t ksym_trace_filter_write(struct file *file, | |||
312 | kfree(entry->ksym_hbp->info.name); | 315 | kfree(entry->ksym_hbp->info.name); |
313 | kfree(entry->ksym_hbp); | 316 | kfree(entry->ksym_hbp); |
314 | kfree(entry); | 317 | kfree(entry); |
318 | ret = 0; | ||
315 | goto out; | 319 | goto out; |
316 | } else { | 320 | } else { |
317 | /* Check for malformed request: (4) */ | 321 | /* Check for malformed request: (4) */ |