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,