t: Renamed mtraversal states LFSR_MTRAVERSAL_* -> LFSR_MTSTATE_*
This commit is contained in:
@@ -8204,20 +8204,20 @@ static int lfsr_mtree_pathlookup(lfs_t *lfs, const char *path,
|
||||
// traversing littlefs is a bit complex, so we use a state machine to keep
|
||||
// track of where we are
|
||||
enum {
|
||||
LFSR_MTRAVERSAL_MROOTANCHOR = 0,
|
||||
LFSR_MTRAVERSAL_MROOTCHAIN = 1,
|
||||
LFSR_MTRAVERSAL_MTREE = 2,
|
||||
LFSR_MTRAVERSAL_MDIRS = 3,
|
||||
LFSR_MTRAVERSAL_MDIR = 4,
|
||||
LFSR_MTRAVERSAL_BTREE = 5,
|
||||
LFSR_MTRAVERSAL_OMDIRS = 6,
|
||||
LFSR_MTRAVERSAL_OBTREE = 7,
|
||||
LFSR_MTRAVERSAL_DONE = 8,
|
||||
LFSR_MTSTATE_MROOTANCHOR = 0,
|
||||
LFSR_MTSTATE_MROOTCHAIN = 1,
|
||||
LFSR_MTSTATE_MTREE = 2,
|
||||
LFSR_MTSTATE_MDIRS = 3,
|
||||
LFSR_MTSTATE_MDIR = 4,
|
||||
LFSR_MTSTATE_BTREE = 5,
|
||||
LFSR_MTSTATE_OMDIRS = 6,
|
||||
LFSR_MTSTATE_OBTREE = 7,
|
||||
LFSR_MTSTATE_DONE = 8,
|
||||
};
|
||||
|
||||
#define LFSR_MTRAVERSAL(_flags) \
|
||||
((lfsr_mtraversal_t){ \
|
||||
.o.o.state=LFSR_MTRAVERSAL_MROOTANCHOR, \
|
||||
.o.o.state=LFSR_MTSTATE_MROOTANCHOR, \
|
||||
.o.o.flags=_flags, \
|
||||
.o.o.mdir.mid=-1, \
|
||||
.o.o.mdir.rbyd.blocks={-1,-1}, \
|
||||
@@ -8281,7 +8281,7 @@ static int lfsr_mtree_traverse_(lfs_t *lfs, lfsr_mtraversal_t *mt,
|
||||
//
|
||||
// note we make sure to include all mroots in our mroot chain!
|
||||
//
|
||||
case LFSR_MTRAVERSAL_MROOTANCHOR:;
|
||||
case LFSR_MTSTATE_MROOTANCHOR:;
|
||||
// fetch the first mroot 0x{0,1}
|
||||
int err = lfsr_mdir_fetch(lfs, &mt->o.o.mdir,
|
||||
-1, &LFSR_MPTR_MROOTANCHOR());
|
||||
@@ -8290,14 +8290,14 @@ static int lfsr_mtree_traverse_(lfs_t *lfs, lfsr_mtraversal_t *mt,
|
||||
}
|
||||
|
||||
// transition to traversing the mroot chain
|
||||
mt->o.o.state = LFSR_MTRAVERSAL_MROOTCHAIN;
|
||||
mt->o.o.state = LFSR_MTSTATE_MROOTCHAIN;
|
||||
|
||||
mtinfo->tag = LFSR_TAG_MDIR;
|
||||
mtinfo->u.mdir = &mt->o.o.mdir;
|
||||
return 0;
|
||||
|
||||
// traverse the mroot chain, checking for mroot/mtree/mdir
|
||||
case LFSR_MTRAVERSAL_MROOTCHAIN:;
|
||||
case LFSR_MTSTATE_MROOTCHAIN:;
|
||||
// lookup mroot, if we find one this is not the active mroot
|
||||
lfsr_tag_t tag;
|
||||
lfsr_data_t data;
|
||||
@@ -8308,7 +8308,7 @@ static int lfsr_mtree_traverse_(lfs_t *lfs, lfsr_mtraversal_t *mt,
|
||||
// traverse any files in our mroot next
|
||||
if (err == LFS_ERR_NOENT) {
|
||||
mt->o.o.mdir.mid = 0;
|
||||
mt->o.o.state = LFSR_MTRAVERSAL_MDIR;
|
||||
mt->o.o.state = LFSR_MTSTATE_MDIR;
|
||||
continue;
|
||||
}
|
||||
return err;
|
||||
@@ -8367,7 +8367,7 @@ static int lfsr_mtree_traverse_(lfs_t *lfs, lfsr_mtraversal_t *mt,
|
||||
}
|
||||
|
||||
// transition to traversing the mdir
|
||||
mt->o.o.state = LFSR_MTRAVERSAL_MDIR;
|
||||
mt->o.o.state = LFSR_MTSTATE_MDIR;
|
||||
|
||||
mtinfo->tag = LFSR_TAG_MDIR;
|
||||
mtinfo->u.mdir = &mt->o.o.mdir;
|
||||
@@ -8383,7 +8383,7 @@ static int lfsr_mtree_traverse_(lfs_t *lfs, lfsr_mtraversal_t *mt,
|
||||
|
||||
// transition to traversing the mtree
|
||||
mt->u.bt = LFSR_BTRAVERSAL();
|
||||
mt->o.o.state = LFSR_MTRAVERSAL_MTREE;
|
||||
mt->o.o.state = LFSR_MTSTATE_MTREE;
|
||||
continue;
|
||||
|
||||
} else {
|
||||
@@ -8392,35 +8392,35 @@ static int lfsr_mtree_traverse_(lfs_t *lfs, lfsr_mtraversal_t *mt,
|
||||
}
|
||||
|
||||
// iterate over mdirs in the mtree
|
||||
case LFSR_MTRAVERSAL_MDIRS:;
|
||||
case LFSR_MTSTATE_MDIRS:;
|
||||
// find the next mdir
|
||||
err = lfsr_mtree_lookup(lfs, mt->o.o.mdir.mid,
|
||||
&mt->o.o.mdir);
|
||||
if (err) {
|
||||
// end of mtree? guess we're done
|
||||
if (err == LFS_ERR_NOENT) {
|
||||
mt->o.o.state = LFSR_MTRAVERSAL_DONE;
|
||||
mt->o.o.state = LFSR_MTSTATE_DONE;
|
||||
continue;
|
||||
}
|
||||
return err;
|
||||
}
|
||||
|
||||
// transition to traversing the mdir
|
||||
mt->o.o.state = LFSR_MTRAVERSAL_MDIR;
|
||||
mt->o.o.state = LFSR_MTSTATE_MDIR;
|
||||
|
||||
mtinfo->tag = LFSR_TAG_MDIR;
|
||||
mtinfo->u.mdir = &mt->o.o.mdir;
|
||||
return 0;
|
||||
|
||||
// scan for blocks/btrees in the current mdir
|
||||
case LFSR_MTRAVERSAL_MDIR:;
|
||||
case LFSR_MTSTATE_MDIR:;
|
||||
// not traversing all blocks? have we exceeded our mdir's weight?
|
||||
// return to mtree iteration
|
||||
if (lfsr_t_ismtreeonly(mt->o.o.flags)
|
||||
|| lfsr_mid_rid(lfs, mt->o.o.mdir.mid)
|
||||
>= (lfsr_srid_t)mt->o.o.mdir.rbyd.weight) {
|
||||
mt->o.o.mdir.mid = lfsr_mid_bid(lfs, mt->o.o.mdir.mid) + 1;
|
||||
mt->o.o.state = LFSR_MTRAVERSAL_MDIRS;
|
||||
mt->o.o.state = LFSR_MTSTATE_MDIRS;
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -8457,21 +8457,21 @@ static int lfsr_mtree_traverse_(lfs_t *lfs, lfsr_mtraversal_t *mt,
|
||||
// no? next we need to check any opened files
|
||||
} else {
|
||||
mt->ot = lfs->omdirs;
|
||||
mt->o.o.state = LFSR_MTRAVERSAL_OMDIRS;
|
||||
mt->o.o.state = LFSR_MTSTATE_OMDIRS;
|
||||
continue;
|
||||
}
|
||||
|
||||
// start traversing
|
||||
mt->u.bt = LFSR_BTRAVERSAL();
|
||||
mt->o.o.state = LFSR_MTRAVERSAL_BTREE;
|
||||
mt->o.o.state = LFSR_MTSTATE_BTREE;
|
||||
continue;
|
||||
|
||||
// scan for blocks/btrees in our opened file list
|
||||
case LFSR_MTRAVERSAL_OMDIRS:;
|
||||
case LFSR_MTSTATE_OMDIRS:;
|
||||
// reached end of opened files? return to mdir traversal
|
||||
if (!mt->ot) {
|
||||
mt->o.o.mdir.mid += 1;
|
||||
mt->o.o.state = LFSR_MTRAVERSAL_MDIR;
|
||||
mt->o.o.state = LFSR_MTSTATE_MDIR;
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -8494,14 +8494,14 @@ static int lfsr_mtree_traverse_(lfs_t *lfs, lfsr_mtraversal_t *mt,
|
||||
const lfsr_file_t *file = (const lfsr_file_t*)mt->ot;
|
||||
mt->o.bshrub = file->o.bshrub;
|
||||
mt->u.bt = LFSR_BTRAVERSAL();
|
||||
mt->o.o.state = LFSR_MTRAVERSAL_OBTREE;
|
||||
mt->o.o.state = LFSR_MTSTATE_OBTREE;
|
||||
continue;
|
||||
|
||||
// traverse any btrees we see, this includes the mtree and any file
|
||||
// btrees/bshrubs
|
||||
case LFSR_MTRAVERSAL_MTREE:;
|
||||
case LFSR_MTRAVERSAL_BTREE:;
|
||||
case LFSR_MTRAVERSAL_OBTREE:;
|
||||
case LFSR_MTSTATE_MTREE:;
|
||||
case LFSR_MTSTATE_BTREE:;
|
||||
case LFSR_MTSTATE_OBTREE:;
|
||||
// traverse through our file
|
||||
err = lfsr_bshrub_traverse(lfs, &mt->o.o.mdir, &mt->o.bshrub,
|
||||
&mt->u.bt,
|
||||
@@ -8509,19 +8509,19 @@ static int lfsr_mtree_traverse_(lfs_t *lfs, lfsr_mtraversal_t *mt,
|
||||
if (err) {
|
||||
if (err == LFS_ERR_NOENT) {
|
||||
// end of mtree? start iterating over mdirs
|
||||
if (mt->o.o.state == LFSR_MTRAVERSAL_MTREE) {
|
||||
if (mt->o.o.state == LFSR_MTSTATE_MTREE) {
|
||||
mt->o.o.mdir.mid = 0;
|
||||
mt->o.o.state = LFSR_MTRAVERSAL_MDIRS;
|
||||
mt->o.o.state = LFSR_MTSTATE_MDIRS;
|
||||
continue;
|
||||
// end of mdir btree? start iterating over opened files
|
||||
} else if (mt->o.o.state == LFSR_MTRAVERSAL_BTREE) {
|
||||
} else if (mt->o.o.state == LFSR_MTSTATE_BTREE) {
|
||||
mt->ot = lfs->omdirs;
|
||||
mt->o.o.state = LFSR_MTRAVERSAL_OMDIRS;
|
||||
mt->o.o.state = LFSR_MTSTATE_OMDIRS;
|
||||
continue;
|
||||
// end of opened btree? go to next opened file
|
||||
} else if (mt->o.o.state == LFSR_MTRAVERSAL_OBTREE) {
|
||||
} else if (mt->o.o.state == LFSR_MTSTATE_OBTREE) {
|
||||
mt->ot = mt->ot->next;
|
||||
mt->o.o.state = LFSR_MTRAVERSAL_OMDIRS;
|
||||
mt->o.o.state = LFSR_MTSTATE_OMDIRS;
|
||||
continue;
|
||||
} else {
|
||||
LFS_UNREACHABLE();
|
||||
@@ -8541,7 +8541,7 @@ static int lfsr_mtree_traverse_(lfs_t *lfs, lfsr_mtraversal_t *mt,
|
||||
|
||||
continue;
|
||||
|
||||
case LFSR_MTRAVERSAL_DONE:;
|
||||
case LFSR_MTSTATE_DONE:;
|
||||
return LFS_ERR_NOENT;
|
||||
|
||||
default:;
|
||||
@@ -8664,7 +8664,7 @@ static int lfsr_mtree_gc(lfs_t *lfs, lfsr_mtraversal_t *mt,
|
||||
? lfs->cfg->gc_compact_thresh
|
||||
: lfs->cfg->block_size - lfs->cfg->block_size/8);
|
||||
|
||||
if (mt->o.o.state == LFSR_MTRAVERSAL_MTREE) {
|
||||
if (mt->o.o.state == LFSR_MTSTATE_MTREE) {
|
||||
int err = lfsr_btree_compact_(lfs, &mt->o.bshrub.u.btree,
|
||||
// note we may be referencing the btree root here
|
||||
mt->u.bt.bid, mtinfo->u.rbyd);
|
||||
@@ -8680,7 +8680,7 @@ static int lfsr_mtree_gc(lfs_t *lfs, lfsr_mtraversal_t *mt,
|
||||
}
|
||||
}
|
||||
|
||||
if (mt->o.o.state == LFSR_MTRAVERSAL_OBTREE) {
|
||||
if (mt->o.o.state == LFSR_MTSTATE_OBTREE) {
|
||||
// just update our opened file
|
||||
lfsr_file_t *file = (lfsr_file_t*)mt->ot;
|
||||
file->o.o.flags |= LFS_F_UNSYNC;
|
||||
@@ -8690,7 +8690,7 @@ static int lfsr_mtree_gc(lfs_t *lfs, lfsr_mtraversal_t *mt,
|
||||
// commit to mdir
|
||||
uint8_t buf[LFSR_BTREE_DSIZE];
|
||||
int err = lfsr_mdir_commit(lfs, &mt->o.o.mdir, LFSR_ATTRS(
|
||||
(mt->o.o.state == LFSR_MTRAVERSAL_MTREE)
|
||||
(mt->o.o.state == LFSR_MTSTATE_MTREE)
|
||||
? LFSR_ATTR(
|
||||
LFSR_TAG_SUB | LFSR_TAG_MTREE, 0,
|
||||
LFSR_DATA_BTREE_(&mt->o.bshrub.u.btree, buf))
|
||||
@@ -12895,23 +12895,23 @@ done:;
|
||||
static void lfsr_traversal_clobber(lfs_t *lfs, lfsr_traversal_t *t) {
|
||||
(void)lfs;
|
||||
// mroot/mtree? transition to mdir iteration
|
||||
if (t->o.o.state < LFSR_MTRAVERSAL_MDIRS) {
|
||||
t->o.o.state = LFSR_MTRAVERSAL_MDIRS;
|
||||
if (t->o.o.state < LFSR_MTSTATE_MDIRS) {
|
||||
t->o.o.state = LFSR_MTSTATE_MDIRS;
|
||||
t->o.o.mdir.mid = 0;
|
||||
t->o.bshrub.u.bshrub.weight = 0;
|
||||
t->o.bshrub.u.bshrub.blocks[0] = -1;
|
||||
t->ot = NULL;
|
||||
// in-mtree mdir? increment the mid (to make progress) and reset to
|
||||
// mdir iteration
|
||||
} else if (t->o.o.state < LFSR_MTRAVERSAL_OMDIRS) {
|
||||
t->o.o.state = LFSR_MTRAVERSAL_MDIR;
|
||||
} else if (t->o.o.state < LFSR_MTSTATE_OMDIRS) {
|
||||
t->o.o.state = LFSR_MTSTATE_MDIR;
|
||||
t->o.o.mdir.mid += 1;
|
||||
t->o.bshrub.u.bshrub.weight = 0;
|
||||
t->o.bshrub.u.bshrub.blocks[0] = -1;
|
||||
t->ot = NULL;
|
||||
// opened mdir? skip to next omdir
|
||||
} else if (t->o.o.state < LFSR_MTRAVERSAL_DONE) {
|
||||
t->o.o.state = LFSR_MTRAVERSAL_OMDIRS;
|
||||
} else if (t->o.o.state < LFSR_MTSTATE_DONE) {
|
||||
t->o.o.state = LFSR_MTSTATE_OMDIRS;
|
||||
t->o.bshrub.u.bshrub.weight = 0;
|
||||
t->o.bshrub.u.bshrub.blocks[0] = -1;
|
||||
t->ot = t->ot->next;
|
||||
@@ -12929,7 +12929,7 @@ static int lfsr_traversal_rewind_(lfs_t *lfs, lfsr_traversal_t *t) {
|
||||
(void)lfs;
|
||||
// reset traversal
|
||||
t->o.o.flags &= ~LFS_F_DIRTY;
|
||||
t->o.o.state = LFSR_MTRAVERSAL_MROOTANCHOR;
|
||||
t->o.o.state = LFSR_MTSTATE_MROOTANCHOR;
|
||||
t->o.o.mdir.mid = -1;
|
||||
t->o.o.mdir.rbyd.weight = 0;
|
||||
t->o.o.mdir.rbyd.blocks[0] = -1;
|
||||
|
||||
Reference in New Issue
Block a user