Adopted lfsr_rbyd_commit in more places

This replaces any remaining calls to lfsr_rbyd_appendattrs+appendcksum
with lfsr_rbyd_commit. At one point lfsr_rbyd_commit did a bit more
related to error recover, but these are equivalent now.

Because of the added complexity of bad prog alloc loops, reducing the
number of function calls in these cases is increasingly enticing.

This saves some code, and a surprising amount of stack!

           code          stack
  before: 33618           2648
  after:  33538 (-0.2%)   2624 (-0.9%)
This commit is contained in:
Christopher Haster
2024-05-27 02:17:13 -05:00
parent 224bd8984b
commit 8e50e4d259
+4 -44
View File
@@ -4297,7 +4297,7 @@ static int lfsr_btree_commit_(lfs_t *lfs, lfsr_btree_t *btree,
// erased bytes? note that the btree trunk field prevents this from
// interacting with other references to the rbyd
lfsr_rbyd_t rbyd_ = rbyd;
int err = lfsr_rbyd_appendattrs(lfs, &rbyd_, rid, -1, -1,
int err = lfsr_rbyd_commit(lfs, &rbyd_, rid,
attrs, attr_count);
if (err) {
if (err == LFS_ERR_RANGE || err == LFS_ERR_CORRUPT) {
@@ -4306,14 +4306,6 @@ static int lfsr_btree_commit_(lfs_t *lfs, lfsr_btree_t *btree,
return err;
}
err = lfsr_rbyd_appendcksum(lfs, &rbyd_);
if (err) {
if (err == LFS_ERR_RANGE || err == LFS_ERR_CORRUPT) {
goto compact;
}
return err;
}
goto recurse;
compact:;
@@ -4463,7 +4455,7 @@ static int lfsr_btree_commit_(lfs_t *lfs, lfsr_btree_t *btree,
// append any pending attrs, it's up to upper
// layers to make sure these always fit
err = lfsr_rbyd_appendattrs(lfs, &rbyd_, rid, -1, -1,
err = lfsr_rbyd_commit(lfs, &rbyd_, rid,
attrs, attr_count);
if (err) {
LFS_ASSERT(err != LFS_ERR_RANGE);
@@ -4474,17 +4466,6 @@ static int lfsr_btree_commit_(lfs_t *lfs, lfsr_btree_t *btree,
return err;
}
// finalize commit
err = lfsr_rbyd_appendcksum(lfs, &rbyd_);
if (err) {
LFS_ASSERT(err != LFS_ERR_RANGE);
// bad prog? try another block
if (err == LFS_ERR_CORRUPT) {
goto compact_relocate;
}
return err;
}
goto recurse;
split:;
@@ -4693,7 +4674,7 @@ static int lfsr_btree_commit_(lfs_t *lfs, lfsr_btree_t *btree,
// append any pending attrs, it's up to upper
// layers to make sure these always fit
err = lfsr_rbyd_appendattrs(lfs, &rbyd_, rid, -1, -1,
err = lfsr_rbyd_commit(lfs, &rbyd_, rid,
attrs, attr_count);
if (err) {
LFS_ASSERT(err != LFS_ERR_RANGE);
@@ -4704,17 +4685,6 @@ static int lfsr_btree_commit_(lfs_t *lfs, lfsr_btree_t *btree,
return err;
}
// finalize the commit
err = lfsr_rbyd_appendcksum(lfs, &rbyd_);
if (err) {
LFS_ASSERT(err != LFS_ERR_RANGE);
// bad prog? try another block
if (err == LFS_ERR_CORRUPT) {
goto merge_relocate;
}
return err;
}
// we must have a parent at this point, but is our parent the root
// and is the root degenerate?
LFS_ASSERT(lfsr_rbyd_trunk(&parent));
@@ -10523,7 +10493,7 @@ relocate:;
}
}
err = lfsr_rbyd_appendattrs(lfs, &rbyd, bid, -1, -1,
err = lfsr_rbyd_commit(lfs, &rbyd, bid,
attrs, attr_count);
if (err) {
LFS_ASSERT(err != LFS_ERR_RANGE);
@@ -10534,16 +10504,6 @@ relocate:;
return err;
}
err = lfsr_rbyd_appendcksum(lfs, &rbyd);
if (err) {
LFS_ASSERT(err != LFS_ERR_RANGE);
// bad prog? try another block
if (err == LFS_ERR_CORRUPT) {
goto relocate;
}
return err;
}
file->bshrub.u.btree = rbyd;
return 0;
}