btree: Tweaked btree root conditions in lfs3_btree_commit_

The child rbyd inherits all of the btree's root state when we hit the
root, including the shrub bit. This means we don't need to check
child.block == btree.block, since only the btree root can be shrubbed
(how would non-root shrubs even work? wait... they could work, but I
think it would just end up a worse balanced binary tree? anyways).

This lets us reorder things into the rare 3-case if statement, which
helps a bit with readability:

- !lfs3_rbyd_trunk(&child) || lfs3_rbyd_isshrub(&child) => need root
- child.blocks[0] == btree->blocks[0]                   => is root
- otherwise                                             => not root

Shaved off some code:

           code          stack          ctx
  before: 36832           2368          656
  after:  36828 (-0.0%)   2368 (+0.0%)  656 (+0.0%)
This commit is contained in:
Christopher Haster
2025-07-16 21:59:52 -05:00
parent ee3cd1ce88
commit 9f246b33a8

22
lfs3.c
View File

@@ -5525,24 +5525,22 @@ static int lfs3_btree_commit_(lfs3_t *lfs3,
// we will always need our parent, so go ahead and find it
lfs3_rbyd_t parent = {.trunk=0, .weight=0};
lfs3_srid_t pid = 0;
// are we root?
if (!lfs3_rbyd_trunk(&child)
|| child.blocks[0] == btree->blocks[0]) {
// new root? shrub root? yield the final root commit to
// higher-level btree/bshrub logic
if (!lfs3_rbyd_trunk(&child)
|| lfs3_rbyd_isshrub(btree)) {
bcommit->bid = rid;
return (!lfs3_rbyd_trunk(&child))
? LFS3_ERR_RANGE
: LFS3_ERR_EXIST;
}
// new root? shrub root? yield the final root commit to
// higher-level btree/bshrub logic
if (!lfs3_rbyd_trunk(&child) || lfs3_rbyd_isshrub(&child)) {
bcommit->bid = rid;
return (!lfs3_rbyd_trunk(&child))
? LFS3_ERR_RANGE
: LFS3_ERR_EXIST;
// are we root?
} else if (child.blocks[0] == btree->blocks[0]) {
// mark btree as unerased in case of failure, our btree rbyd and
// root rbyd can diverge if there's a split, but we would have
// marked the old root as unerased earlier anyways
lfs3_btree_claim(btree);
// need to lookup child's parent
} else {
int err = lfs3_btree_parent(lfs3, btree, bcommit->bid, &child,
&parent, &pid);