aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNamhyung Kim <namhyung@kernel.org>2014-06-11 04:06:54 -0400
committerSteven Rostedt <rostedt@goodmis.org>2014-07-01 07:13:41 -0400
commitef2fbe16ac176c21e3b3013c169e6fdb71ec56c7 (patch)
tree8344a51e21bb16d6823a94c769290bfc6645385e
parent1f61be007e16a5d60b1cf868aa30d87f181e8e14 (diff)
ftrace: Do not copy hash if O_TRUNC is set
When a filter file is open for writing and O_TRUNC is set, there's no need to copy and free the filter entries. Link: http://lkml.kernel.org/p/1402474014-28655-2-git-send-email-namhyung@kernel.org Signed-off-by: Namhyung Kim <namhyung@kernel.org> Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
-rw-r--r--kernel/trace/ftrace.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c
index e14ff4c1713e..232b898eebbd 100644
--- a/kernel/trace/ftrace.c
+++ b/kernel/trace/ftrace.c
@@ -3010,7 +3010,13 @@ ftrace_regex_open(struct ftrace_ops *ops, int flag,
3010 hash = ops->filter_hash; 3010 hash = ops->filter_hash;
3011 3011
3012 if (file->f_mode & FMODE_WRITE) { 3012 if (file->f_mode & FMODE_WRITE) {
3013 iter->hash = alloc_and_copy_ftrace_hash(FTRACE_HASH_DEFAULT_BITS, hash); 3013 const int size_bits = FTRACE_HASH_DEFAULT_BITS;
3014
3015 if (file->f_flags & O_TRUNC)
3016 iter->hash = alloc_ftrace_hash(size_bits);
3017 else
3018 iter->hash = alloc_and_copy_ftrace_hash(size_bits, hash);
3019
3014 if (!iter->hash) { 3020 if (!iter->hash) {
3015 trace_parser_put(&iter->parser); 3021 trace_parser_put(&iter->parser);
3016 kfree(iter); 3022 kfree(iter);
@@ -3019,10 +3025,6 @@ ftrace_regex_open(struct ftrace_ops *ops, int flag,
3019 } 3025 }
3020 } 3026 }
3021 3027
3022 if ((file->f_mode & FMODE_WRITE) &&
3023 (file->f_flags & O_TRUNC))
3024 ftrace_filter_reset(iter->hash);
3025
3026 if (file->f_mode & FMODE_READ) { 3028 if (file->f_mode & FMODE_READ) {
3027 iter->pg = ftrace_pages_start; 3029 iter->pg = ftrace_pages_start;
3028 3030