At 06/01/2016 12:23 AM, David Sterba wrote:
On Tue, May 31, 2016 at 03:27:42PM +0800, luke wrote:
+static void ref_root_fini(struct ref_root *ref_tree)
+{
+       struct ref_node *node;
+       struct rb_node *next;
+
+       while ((next = rb_first(&ref_tree->rb_root)) != NULL) {
+               node = rb_entry(next, struct ref_node, rb_node);
+               rb_erase(next, &ref_tree->rb_root);
+               kfree(node);
This could be slow as rb_erase has to do the rb-tree rotations. Can we
do a post-order traversal and just free the nodes?
Excuse me, this seems to be standard way to release the rb-tree. For
example,  "btrfs_free_block_groups" this function is the same way. So
should i refactor this function?
So for first version it's ok to keep it the simple way, but refactoring
to the post-order traversal should help performance. And as there are
more places it would be better to do it separately.


Yes, you're right. I have updated this patch to fix other problems. And, I'll refactor this function with another patch soon.

Thanks,
Lu


--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to