From 3b11e980e2ecfde7bc64076d9c8eb11355bef565 Mon Sep 17 00:00:00 2001 From: Christopher Haster Date: Wed, 14 Aug 2024 16:48:30 -0500 Subject: [PATCH] Fixed double-checking of btree nodes with ckfetches + ckmeta No reason to check every btree node twice! This adds a bit of code in the ckfetches case, but it's well worth it to avoid unnecessary checks. It would actually have saved code if ckfetches were unconditional, but ckfetches are currently still behind a runtime flag even when enabled: code stack default before: 36432 2672 (+0.0%) default after: 36432 (+0.0%) 2672 (+0.0%) ckfetches before: 36674 2704 ckfetches after: 36682 (+0.0%) 2704 (+0.0%) --- lfs.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/lfs.c b/lfs.c index c6437184..ea66e228 100644 --- a/lfs.c +++ b/lfs.c @@ -9474,6 +9474,10 @@ static int lfsr_mtree_traverse(lfs_t *lfs, lfsr_traversal_t *t, // validate btree nodes? note mdirs are already validated if ((lfsr_t_isckmeta(t->o.o.flags) || lfsr_t_isckdata(t->o.o.flags)) + // note ckfetches already validates btree nodes + && LFS_IFDEF_CKFETCHES( + !lfsr_m_isckfetches(lfs->flags), + true) && tag == LFSR_TAG_BRANCH) { lfsr_rbyd_t *rbyd = (lfsr_rbyd_t*)bptr.data.u.buffer; err = lfsr_rbyd_fetchck(lfs, rbyd, @@ -9534,8 +9538,8 @@ dropped:; // mkconsistencing mdirs? if (lfsr_t_ismkconsistent(t->o.o.flags) - && tag == LFSR_TAG_MDIR - && lfsr_i_hasorphans(lfs->flags)) { + && lfsr_i_hasorphans(lfs->flags) + && tag == LFSR_TAG_MDIR) { lfsr_mdir_t *mdir = (lfsr_mdir_t*)bptr.data.u.buffer; err = lfsr_fs_fixorphans_(lfs, mdir); if (err) { @@ -12636,6 +12640,10 @@ static int lfsr_file_ck(lfs_t *lfs, const lfsr_file_t *file, // validate btree nodes? if ((lfsr_t_isckmeta(flags) || lfsr_t_isckdata(flags)) + // note ckfetches already validates btree nodes + && LFS_IFDEF_CKFETCHES( + !lfsr_m_isckfetches(lfs->flags), + true) && tag == LFSR_TAG_BRANCH) { lfsr_rbyd_t *rbyd = (lfsr_rbyd_t*)bptr.data.u.buffer; err = lfsr_rbyd_fetchck(lfs, rbyd,