Hello, Michel. > > Hmmm, I had not thought about that. Agree that this can be useful - > there is already similar test code in rbtree_test.c and also > vma_compute_subtree_gap() in mmap.c, ... > > With patch 3/3 of this series, the RBCOMPUTE function (typically > generated through the RB_DECLARE_CALLBACKS_MAX macro) will return a > bool indicating if the node's augmented value was already correctly > set. Maybe this can be used for test code, through in the false case, > the node's augmented value is already overwritten with the correct > value. Not sure if that is a problem though - the files I mentioned > above have test code that will dump the values if there is a mismatch, > but really I think in every realistic case just noting that there was > one would be just as helpful as being able to dump the old (incorrect) > value.... > > What do you think - is the RBCOMPUTE(node, true) function sufficient > for such debugging ? > I think so, at least i do not see any issues with that. If it returns "false" then it will indicate that the node was not correctly augmented.
Also, i see in many places across your patches there is below code: <snip> RBSTRUCT *child; \ RBTYPE max = RBCOMPUTE(node); \ if (node->RBFIELD.rb_left) { \ child = rb_entry(node->RBFIELD.rb_left, RBSTRUCT, RBFIELD); \ if (child->RBAUGMENTED > max) \ max = child->RBAUGMENTED; \ } \ if (node->RBFIELD.rb_right) { \ child = rb_entry(node->RBFIELD.rb_right, RBSTRUCT, RBFIELD); \ if (child->RBAUGMENTED > max) \ max = child->RBAUGMENTED; \ } \ if (exit && node->RBAUGMENTED == max) \ return true; \ node->RBAUGMENTED = max; \ return false; <snip> i think it can be simplified by using max3 macro. For example: <snip> get_subtree_max(struct rb_node *node) { struct something *foo; va = rb_entry_safe(node, struct something, rb_node); return foo ? foo->subtree_max : 0; } compute_subtree_max_size(struct vmap_area *va) { return max3(va_size(va), get_subtree_max_size(va->rb_node.rb_left), get_subtree_max_size(va->rb_node.rb_right)); } <snip> What do you think about that? Thank you. -- Vlad Rezki