From 8e50e4d259199c02476a60ac6a5082b4a966beaf Mon Sep 17 00:00:00 2001 From: Christopher Haster Date: Mon, 27 May 2024 02:17:13 -0500 Subject: [PATCH] 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%) --- lfs.c | 48 ++++-------------------------------------------- 1 file changed, 4 insertions(+), 44 deletions(-) diff --git a/lfs.c b/lfs.c index ac2f301a..3c233d63 100644 --- a/lfs.c +++ b/lfs.c @@ -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; }