/* Iterate through the rbtree using a post order traversal path to release the next node. It won't necessary release one at each iteration but it will at least advance closer to the next one to be released.  */
static struct rb_node* release_next(struct tracer_stat *ts, struct rb_node *node)
/* Iterate through the rbtree using a post order traversal path to release the next node. It won't necessary release one at each iteration but it will at least advance closer to the next one to be released.  */
static struct rb_node* release_next(struct tracer_stat *ts, struct rb_node *node)
{
	struct stat_node *snode;
	struct rb_node *parent = rb_parent(node);
	if (node->rb_left)
		return node->rb_left;
	else if (node->rb_right)
		return node->rb_right;
	else {
		if (!parent)
			;
		else if (parent->rb_left == node)
			parent->rb_left = NULL;
		else
			parent->rb_right = NULL;
		snode = container_of(node, struct stat_node, node);
		if (ts->stat_release)
			ts->stat_release(snode->stat);
		kfree(snode);
		return parent;
	}
}