MINOR: ebtree: update the eb32sc parent node's scope on delete
During a delete operation, if the deleted node is above its leaf's
parent, this parent will replace the node and then go up. In this
case it is important to update the new parent's scope to reflect
the presence of other branches.
It's worth noting that in theory we should precisely recompute the
exact node value, but it seems that it's not worth it for the rare
cases there is a mismatch.
diff --git a/ebtree/eb32sctree.c b/ebtree/eb32sctree.c
index c1b3535..96281cf 100644
--- a/ebtree/eb32sctree.c
+++ b/ebtree/eb32sctree.c
@@ -370,12 +370,14 @@
/* From now on, <node> and <parent> are necessarily different, and the
* <node>'s node part is in use. By definition, <parent> is at least
- * below <node>, so keeping its key for the bit string is OK.
+ * below <node>, so keeping its key for the bit string is OK. However
+ * its scope must be enlarged to cover the new branch it absorbs.
*/
parent->node_p = node->node_p;
parent->branches = node->branches;
parent->bit = node->bit;
+ container_of(parent, struct eb32sc_node, node)->node_s |= eb32->node_s;
/* We must now update the new node's parent... */
gpside = eb_gettag(parent->node_p);