diff options
Diffstat (limited to 'kernel/trace/ftrace.c')
| -rw-r--r-- | kernel/trace/ftrace.c | 28 |
1 files changed, 18 insertions, 10 deletions
diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c index f3716bf04df6..1e1d23c26308 100644 --- a/kernel/trace/ftrace.c +++ b/kernel/trace/ftrace.c | |||
| @@ -768,7 +768,7 @@ static struct tracer_stat function_stats __initdata = { | |||
| 768 | .stat_show = function_stat_show | 768 | .stat_show = function_stat_show |
| 769 | }; | 769 | }; |
| 770 | 770 | ||
| 771 | static void ftrace_profile_debugfs(struct dentry *d_tracer) | 771 | static __init void ftrace_profile_debugfs(struct dentry *d_tracer) |
| 772 | { | 772 | { |
| 773 | struct ftrace_profile_stat *stat; | 773 | struct ftrace_profile_stat *stat; |
| 774 | struct dentry *entry; | 774 | struct dentry *entry; |
| @@ -786,7 +786,6 @@ static void ftrace_profile_debugfs(struct dentry *d_tracer) | |||
| 786 | * The files created are permanent, if something happens | 786 | * The files created are permanent, if something happens |
| 787 | * we still do not free memory. | 787 | * we still do not free memory. |
| 788 | */ | 788 | */ |
| 789 | kfree(stat); | ||
| 790 | WARN(1, | 789 | WARN(1, |
| 791 | "Could not allocate stat file for cpu %d\n", | 790 | "Could not allocate stat file for cpu %d\n", |
| 792 | cpu); | 791 | cpu); |
| @@ -813,7 +812,7 @@ static void ftrace_profile_debugfs(struct dentry *d_tracer) | |||
| 813 | } | 812 | } |
| 814 | 813 | ||
| 815 | #else /* CONFIG_FUNCTION_PROFILER */ | 814 | #else /* CONFIG_FUNCTION_PROFILER */ |
| 816 | static void ftrace_profile_debugfs(struct dentry *d_tracer) | 815 | static __init void ftrace_profile_debugfs(struct dentry *d_tracer) |
| 817 | { | 816 | { |
| 818 | } | 817 | } |
| 819 | #endif /* CONFIG_FUNCTION_PROFILER */ | 818 | #endif /* CONFIG_FUNCTION_PROFILER */ |
| @@ -1663,7 +1662,7 @@ ftrace_regex_open(struct inode *inode, struct file *file, int enable) | |||
| 1663 | 1662 | ||
| 1664 | mutex_lock(&ftrace_regex_lock); | 1663 | mutex_lock(&ftrace_regex_lock); |
| 1665 | if ((file->f_mode & FMODE_WRITE) && | 1664 | if ((file->f_mode & FMODE_WRITE) && |
| 1666 | !(file->f_flags & O_APPEND)) | 1665 | (file->f_flags & O_TRUNC)) |
| 1667 | ftrace_filter_reset(enable); | 1666 | ftrace_filter_reset(enable); |
| 1668 | 1667 | ||
| 1669 | if (file->f_mode & FMODE_READ) { | 1668 | if (file->f_mode & FMODE_READ) { |
| @@ -2578,7 +2577,7 @@ ftrace_graph_open(struct inode *inode, struct file *file) | |||
| 2578 | 2577 | ||
| 2579 | mutex_lock(&graph_lock); | 2578 | mutex_lock(&graph_lock); |
| 2580 | if ((file->f_mode & FMODE_WRITE) && | 2579 | if ((file->f_mode & FMODE_WRITE) && |
| 2581 | !(file->f_flags & O_APPEND)) { | 2580 | (file->f_flags & O_TRUNC)) { |
| 2582 | ftrace_graph_count = 0; | 2581 | ftrace_graph_count = 0; |
| 2583 | memset(ftrace_graph_funcs, 0, sizeof(ftrace_graph_funcs)); | 2582 | memset(ftrace_graph_funcs, 0, sizeof(ftrace_graph_funcs)); |
| 2584 | } | 2583 | } |
| @@ -2597,6 +2596,14 @@ ftrace_graph_open(struct inode *inode, struct file *file) | |||
| 2597 | } | 2596 | } |
| 2598 | 2597 | ||
| 2599 | static int | 2598 | static int |
| 2599 | ftrace_graph_release(struct inode *inode, struct file *file) | ||
| 2600 | { | ||
| 2601 | if (file->f_mode & FMODE_READ) | ||
| 2602 | seq_release(inode, file); | ||
| 2603 | return 0; | ||
| 2604 | } | ||
| 2605 | |||
| 2606 | static int | ||
| 2600 | ftrace_set_func(unsigned long *array, int *idx, char *buffer) | 2607 | ftrace_set_func(unsigned long *array, int *idx, char *buffer) |
| 2601 | { | 2608 | { |
| 2602 | struct dyn_ftrace *rec; | 2609 | struct dyn_ftrace *rec; |
| @@ -2725,9 +2732,10 @@ ftrace_graph_write(struct file *file, const char __user *ubuf, | |||
| 2725 | } | 2732 | } |
| 2726 | 2733 | ||
| 2727 | static const struct file_operations ftrace_graph_fops = { | 2734 | static const struct file_operations ftrace_graph_fops = { |
| 2728 | .open = ftrace_graph_open, | 2735 | .open = ftrace_graph_open, |
| 2729 | .read = seq_read, | 2736 | .read = seq_read, |
| 2730 | .write = ftrace_graph_write, | 2737 | .write = ftrace_graph_write, |
| 2738 | .release = ftrace_graph_release, | ||
| 2731 | }; | 2739 | }; |
| 2732 | #endif /* CONFIG_FUNCTION_GRAPH_TRACER */ | 2740 | #endif /* CONFIG_FUNCTION_GRAPH_TRACER */ |
| 2733 | 2741 | ||
| @@ -3160,10 +3168,10 @@ ftrace_enable_sysctl(struct ctl_table *table, int write, | |||
| 3160 | 3168 | ||
| 3161 | ret = proc_dointvec(table, write, file, buffer, lenp, ppos); | 3169 | ret = proc_dointvec(table, write, file, buffer, lenp, ppos); |
| 3162 | 3170 | ||
| 3163 | if (ret || !write || (last_ftrace_enabled == ftrace_enabled)) | 3171 | if (ret || !write || (last_ftrace_enabled == !!ftrace_enabled)) |
| 3164 | goto out; | 3172 | goto out; |
| 3165 | 3173 | ||
| 3166 | last_ftrace_enabled = ftrace_enabled; | 3174 | last_ftrace_enabled = !!ftrace_enabled; |
| 3167 | 3175 | ||
| 3168 | if (ftrace_enabled) { | 3176 | if (ftrace_enabled) { |
| 3169 | 3177 | ||
