diff options
-rw-r--r-- | kernel/trace/trace_stat.c | 41 |
1 files changed, 5 insertions, 36 deletions
diff --git a/kernel/trace/trace_stat.c b/kernel/trace/trace_stat.c index 847f88a6194b..7af67360b330 100644 --- a/kernel/trace/trace_stat.c +++ b/kernel/trace/trace_stat.c | |||
@@ -43,46 +43,15 @@ static DEFINE_MUTEX(all_stat_sessions_mutex); | |||
43 | /* The root directory for all stat files */ | 43 | /* The root directory for all stat files */ |
44 | static struct dentry *stat_dir; | 44 | static struct dentry *stat_dir; |
45 | 45 | ||
46 | /* | 46 | static void __reset_stat_session(struct stat_session *session) |
47 | * Iterate through the rbtree using a post order traversal path | ||
48 | * to release the next node. | ||
49 | * It won't necessary release one at each iteration | ||
50 | * but it will at least advance closer to the next one | ||
51 | * to be released. | ||
52 | */ | ||
53 | static struct rb_node *release_next(struct tracer_stat *ts, | ||
54 | struct rb_node *node) | ||
55 | { | 47 | { |
56 | struct stat_node *snode; | 48 | struct stat_node *snode, *n; |
57 | struct rb_node *parent = rb_parent(node); | ||
58 | |||
59 | if (node->rb_left) | ||
60 | return node->rb_left; | ||
61 | else if (node->rb_right) | ||
62 | return node->rb_right; | ||
63 | else { | ||
64 | if (!parent) | ||
65 | ; | ||
66 | else if (parent->rb_left == node) | ||
67 | parent->rb_left = NULL; | ||
68 | else | ||
69 | parent->rb_right = NULL; | ||
70 | 49 | ||
71 | snode = container_of(node, struct stat_node, node); | 50 | rbtree_postorder_for_each_entry_safe(snode, n, &session->stat_root, node) { |
72 | if (ts->stat_release) | 51 | if (session->ts->stat_release) |
73 | ts->stat_release(snode->stat); | 52 | session->ts->stat_release(snode->stat); |
74 | kfree(snode); | 53 | kfree(snode); |
75 | |||
76 | return parent; | ||
77 | } | 54 | } |
78 | } | ||
79 | |||
80 | static void __reset_stat_session(struct stat_session *session) | ||
81 | { | ||
82 | struct rb_node *node = session->stat_root.rb_node; | ||
83 | |||
84 | while (node) | ||
85 | node = release_next(session->ts, node); | ||
86 | 55 | ||
87 | session->stat_root = RB_ROOT; | 56 | session->stat_root = RB_ROOT; |
88 | } | 57 | } |