Commit dca0d122 authored by Namhyung Kim's avatar Namhyung Kim Committed by Arnaldo Carvalho de Melo

perf callchain: Check return value of append_chain_children()

Now it can check the error case, so check and pass it to the caller.
Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
Acked-by: default avatarJiri Olsa <jolsa@kernel.org>
Cc: Andi Kleen <andi@firstfloor.org>
Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
Cc: Wang Nan <wangnan0@huawei.com>
Link: http://lkml.kernel.org/r/1455631723-17345-7-git-send-email-namhyung@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent f2bb4c5a
...@@ -586,7 +586,7 @@ append_chain(struct callchain_node *root, ...@@ -586,7 +586,7 @@ append_chain(struct callchain_node *root,
struct callchain_cursor *cursor, struct callchain_cursor *cursor,
u64 period); u64 period);
static void static int
append_chain_children(struct callchain_node *root, append_chain_children(struct callchain_node *root,
struct callchain_cursor *cursor, struct callchain_cursor *cursor,
u64 period) u64 period)
...@@ -598,7 +598,7 @@ append_chain_children(struct callchain_node *root, ...@@ -598,7 +598,7 @@ append_chain_children(struct callchain_node *root,
node = callchain_cursor_current(cursor); node = callchain_cursor_current(cursor);
if (!node) if (!node)
return; return -1;
/* lookup in childrens */ /* lookup in childrens */
while (*p) { while (*p) {
...@@ -611,6 +611,8 @@ append_chain_children(struct callchain_node *root, ...@@ -611,6 +611,8 @@ append_chain_children(struct callchain_node *root,
ret = append_chain(rnode, cursor, period); ret = append_chain(rnode, cursor, period);
if (ret == MATCH_EQ) if (ret == MATCH_EQ)
goto inc_children_hit; goto inc_children_hit;
if (ret == MATCH_ERROR)
return -1;
if (ret == MATCH_LT) if (ret == MATCH_LT)
p = &parent->rb_left; p = &parent->rb_left;
...@@ -620,7 +622,7 @@ append_chain_children(struct callchain_node *root, ...@@ -620,7 +622,7 @@ append_chain_children(struct callchain_node *root,
/* nothing in children, add to the current node */ /* nothing in children, add to the current node */
rnode = add_child(root, cursor, period); rnode = add_child(root, cursor, period);
if (rnode == NULL) if (rnode == NULL)
return; return -1;
rb_link_node(&rnode->rb_node_in, parent, p); rb_link_node(&rnode->rb_node_in, parent, p);
rb_insert_color(&rnode->rb_node_in, &root->rb_root_in); rb_insert_color(&rnode->rb_node_in, &root->rb_root_in);
...@@ -628,6 +630,7 @@ append_chain_children(struct callchain_node *root, ...@@ -628,6 +630,7 @@ append_chain_children(struct callchain_node *root,
inc_children_hit: inc_children_hit:
root->children_hit += period; root->children_hit += period;
root->children_count++; root->children_count++;
return 0;
} }
static enum match_result static enum match_result
...@@ -688,7 +691,8 @@ append_chain(struct callchain_node *root, ...@@ -688,7 +691,8 @@ append_chain(struct callchain_node *root,
} }
/* We match the node and still have a part remaining */ /* We match the node and still have a part remaining */
append_chain_children(root, cursor, period); if (append_chain_children(root, cursor, period) < 0)
return MATCH_ERROR;
return MATCH_EQ; return MATCH_EQ;
} }
...@@ -702,7 +706,8 @@ int callchain_append(struct callchain_root *root, ...@@ -702,7 +706,8 @@ int callchain_append(struct callchain_root *root,
callchain_cursor_commit(cursor); callchain_cursor_commit(cursor);
append_chain_children(&root->node, cursor, period); if (append_chain_children(&root->node, cursor, period) < 0)
return -1;
if (cursor->nr > root->max_depth) if (cursor->nr > root->max_depth)
root->max_depth = cursor->nr; root->max_depth = cursor->nr;
...@@ -730,7 +735,8 @@ merge_chain_branch(struct callchain_cursor *cursor, ...@@ -730,7 +735,8 @@ merge_chain_branch(struct callchain_cursor *cursor,
if (src->hit) { if (src->hit) {
callchain_cursor_commit(cursor); callchain_cursor_commit(cursor);
append_chain_children(dst, cursor, src->hit); if (append_chain_children(dst, cursor, src->hit) < 0)
return -1;
} }
n = rb_first(&src->rb_root_in); n = rb_first(&src->rb_root_in);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment