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:
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user