From 4d86c90f1b82c0bfc3b2f2cd1d64689c4e3a749e Mon Sep 17 00:00:00 2001 From: Christopher Haster Date: Sat, 6 Jul 2024 00:36:03 -0500 Subject: [PATCH] t: Dropped LFS_T_EXCL/LFS_I_DIRTY The tests highlighted that the LFS_I_DIRTY flag in lfsr_tinfo approach is insufficient. Consider what happens if our filesystem is mutated while traversing the last mdir: 1. Traversal traverses last mdir, populate blocks, return first block 2. Filesystem mutated, maybe mdir was compacted, clobbers traversal and sets LFS_I_DIRTY 3. Traversal return LFS_ERR_NOENT immediately, last block never returned (and out of date), LFS_I_DIRTY never returned Not only do we miss the LFS_I_DIRTY flag, but we completely miss the last block in the mdir pair without any warning. This is _not_ a problem for the actual lookahead buffer, since we still internally check the LFS_I_DIRTY flag before marking it as complete, but it is an issue for any external logic that depends on the traversal being complete... --- We could revert to LFS_T_EXCL, but, to be honest, I just really don't know a good name for this flag... LFS_T_EXCL is a bad name because it conflicts with LFS_O_EXCL. These flags have very different behaviors, which risks confusing users, and risks potential name conflicts down the line if we ever want LFS_T_EXCL-esque semantics for open dirs/files (not unreasonable, though quite fancy). My current best contender is LFS_T_WATCH, but while scratching my head on this, I starting to wonder why we're even providing LFS_T_EXCL in the first place... We err on the side of forcing users to implement filesystem-external features themselves when possible elsewhere, and LFS_T_EXCL technically _can_ be implemented entirely outside of the filesystem. Though to be fair it is quite annoying/tedious. It's not like there's any equivalent feature for dir/file reads anyways. And a background thread calling lfsr_traversal_read with LFS_T_LOOKAHEAD will still _eventually_ make progress, even if it takes a bit longer. Don't get me wrong, I understand it is significantly easier to implement this inside the filesystem than outside. But it's also easier to implement this later than right now. And if we implement this later, hopefully we'll have a better idea what exactly will be useful for users. --- Removing LFS_T_EXCL/LFS_I_DIRTY has no real impact on code cost. We were really just exposing internal logic that we need for lookahead correctness anyways: code stack before: 35224 2680 after: 35220 (-0.0%) 2680 (+0.0%) --- lfs.c | 17 +- lfs.h | 9 +- tests/test_traversal.toml | 346 -------------------------------------- 3 files changed, 10 insertions(+), 362 deletions(-) diff --git a/lfs.c b/lfs.c index 16e74ec0..089202a3 100644 --- a/lfs.c +++ b/lfs.c @@ -5968,7 +5968,7 @@ static bool lfsr_omdir_ismidopen(lfs_t *lfs, lfsr_smid_t mid) { static void lfsr_fs_mkdirty(lfs_t *lfs) { for (lfsr_omdir_t *o = lfs->omdirs; o; o = o->next) { if (o->type == LFS_TYPE_TRAVERSAL) { - o->flags |= LFS_I_DIRTY; + o->flags |= LFS_F_DIRTY; } } } @@ -8261,8 +8261,8 @@ static inline bool lfsr_t_isckdata(uint32_t flags) { return flags & (LFS_T_CKDATA ^ LFS_T_CKMETA); } -static inline bool lfsr_i_isdirty(uint32_t flags) { - return flags & LFS_I_DIRTY; +static inline bool lfsr_f_isdirty(uint32_t flags) { + return flags & LFS_F_DIRTY; } @@ -8679,7 +8679,7 @@ static int lfsr_mtree_gc(lfs_t *lfs, lfsr_traversal_t *t, } // mark as dirty - t->o.o.flags |= LFS_I_DIRTY; + t->o.o.flags |= LFS_F_DIRTY; } // compacting btree nodes? @@ -8757,7 +8757,7 @@ static int lfsr_mtree_gc(lfs_t *lfs, lfsr_traversal_t *t, t->u.bt.rid = t->u.bt.bid; // mark as dirty - t->o.o.flags |= LFS_I_DIRTY; + t->o.o.flags |= LFS_F_DIRTY; } if (tag_) { @@ -12827,7 +12827,7 @@ int lfsr_traversal_open(lfs_t *lfs, lfsr_traversal_t *t, uint32_t flags) { LFS_ASSERT(!lfsr_t_ismtreeonly(flags) || !lfsr_t_islookahead(flags)); LFS_ASSERT(!lfsr_t_ismtreeonly(flags) || !lfsr_t_isckdata(flags)); // these flags are internal and shouldn't be provided by the user - LFS_ASSERT(!lfsr_i_isdirty(flags)); + LFS_ASSERT(!lfsr_f_isdirty(flags)); // some flags mutate the filesystem if (lfsr_t_ismkconsistent(flags) @@ -12870,7 +12870,6 @@ int lfsr_traversal_read(lfs_t *lfs, lfsr_traversal_t *t, // some redund blocks left over? if (t->blocks[0] != -1) { // write our traversal info - tinfo->flags = t->o.o.flags & LFS_I_DIRTY; tinfo->btype = lfsr_t_btype(t->o.o.flags); tinfo->block = t->blocks[0]; @@ -12918,7 +12917,7 @@ int lfsr_traversal_read(lfs_t *lfs, lfsr_traversal_t *t, done:; // was a lookahead scan successful? if (lfsr_t_islookahead(t->o.o.flags) - && !lfsr_i_isdirty(t->o.o.flags)) { + && !lfsr_f_isdirty(t->o.o.flags)) { lfs_alloc_markfree(lfs); } @@ -12961,7 +12960,7 @@ static void lfsr_traversal_clobber(lfs_t *lfs, lfsr_traversal_t *t) { static int lfsr_traversal_rewind_(lfs_t *lfs, lfsr_traversal_t *t) { (void)lfs; // reset traversal - t->o.o.flags &= ~LFS_I_DIRTY; + t->o.o.flags &= ~LFS_F_DIRTY; t->o.o.state = LFSR_TSTATE_MROOTANCHOR; t->o.o.mdir.mid = -1; t->o.o.mdir.rbyd.weight = 0; diff --git a/lfs.h b/lfs.h index 555bd5e5..7a75496d 100644 --- a/lfs.h +++ b/lfs.h @@ -177,11 +177,9 @@ enum lfs_traversal_flags { // TODO // LFS_T_REPAIRMETA = 0x0400, // Repair metadata blocks // LFS_T_REPAIRDATA = 0x0c00, // Repair metadata + data blocks -}; -enum lfs_tinfo_flags { - // traversal info flags - LFS_I_DIRTY = 0x1000, // Filesystem has been modified + // internally used flags + LFS_F_DIRTY = 0x1000, // Filesystem has been modified }; @@ -385,9 +383,6 @@ struct lfs_fsinfo { // Traversal info structure struct lfs_tinfo { - // Traversal flags - uint16_t flags; - // Type of the block uint8_t btype; diff --git a/tests/test_traversal.toml b/tests/test_traversal.toml index 08bb9a8b..41fc3ab7 100644 --- a/tests/test_traversal.toml +++ b/tests/test_traversal.toml @@ -27,11 +27,9 @@ code = ''' | ((COMPACT) ? LFS_T_COMPACT : 0)) => 0; struct lfs_tinfo tinfo; lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); lfsr_traversal_read(&lfs, &t, &tinfo) => LFS_ERR_NOENT; @@ -60,22 +58,18 @@ code = ''' | ((COMPACT) ? LFS_T_COMPACT : 0)) => 0; struct lfs_tinfo tinfo; lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); lfsr_traversal_read(&lfs, &t, &tinfo) => LFS_ERR_NOENT; lfsr_traversal_rewind(&lfs, &t) => 0; lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); lfsr_traversal_read(&lfs, &t, &tinfo) => LFS_ERR_NOENT; @@ -104,11 +98,9 @@ code = ''' | ((COMPACT) ? LFS_T_COMPACT : 0)) => 0; struct lfs_tinfo tinfo; lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); lfsr_traversal_read(&lfs, &t, &tinfo) => LFS_ERR_NOENT; @@ -166,7 +158,6 @@ code = ''' printf("traversal: btype %d block 0x%x\n", tinfo.btype, tinfo.block); - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR || tinfo.btype == LFS_BTYPE_BTREE); // keep track of seen blocks @@ -288,7 +279,6 @@ code = ''' printf("traversal: btype %d block 0x%x\n", tinfo.btype, tinfo.block); - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR || tinfo.btype == LFS_BTYPE_BTREE || tinfo.btype == LFS_BTYPE_DATA); @@ -403,7 +393,6 @@ code = ''' printf("traversal: btype %d block 0x%x\n", tinfo.btype, tinfo.block); - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR || tinfo.btype == LFS_BTYPE_BTREE || tinfo.btype == LFS_BTYPE_DATA); @@ -529,7 +518,6 @@ code = ''' printf("traversal: btype %d block 0x%x\n", tinfo.btype, tinfo.block); - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR || tinfo.btype == LFS_BTYPE_BTREE); // keep track of seen blocks @@ -660,7 +648,6 @@ code = ''' printf("traversal: btype %d block 0x%x\n", tinfo.btype, tinfo.block); - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR || tinfo.btype == LFS_BTYPE_BTREE || tinfo.btype == LFS_BTYPE_DATA); @@ -784,7 +771,6 @@ code = ''' printf("traversal: btype %d block 0x%x\n", tinfo.btype, tinfo.block); - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR || tinfo.btype == LFS_BTYPE_BTREE || tinfo.btype == LFS_BTYPE_DATA); @@ -897,7 +883,6 @@ code = ''' goto done; } - assert(tinfo.flags == 0); if (tinfo.btype == LFS_BTYPE_MDIR) { if (k == i || k == i+1) { // clobber this block @@ -994,7 +979,6 @@ code = ''' goto done; } - assert(tinfo.flags == 0); if (tinfo.btype == LFS_BTYPE_MDIR) { if (k == i || k == i+1) { // clobber this block @@ -1026,8 +1010,6 @@ code = ''' if (err == LFS_ERR_CORRUPT) { break; } - - assert(tinfo.flags == 0); } lfsr_traversal_close(&lfs, &t) => 0; @@ -1095,7 +1077,6 @@ code = ''' goto done; } - assert(tinfo.flags == 0); if (tinfo.btype == LFS_BTYPE_MDIR) { if (k == i || k == i+1) { // clobber this block @@ -1127,8 +1108,6 @@ code = ''' if (err == LFS_ERR_CORRUPT) { break; } - - assert(tinfo.flags == 0); } lfsr_traversal_close(&lfs, &t) => 0; @@ -1178,7 +1157,6 @@ code = ''' goto done; } - assert(tinfo.flags == 0); if (tinfo.btype == LFS_BTYPE_BTREE) { if (k == i) { // clobber this block @@ -1208,8 +1186,6 @@ code = ''' if (err == LFS_ERR_CORRUPT) { break; } - - assert(tinfo.flags == 0); } lfsr_traversal_close(&lfs, &t) => 0; @@ -1275,7 +1251,6 @@ code = ''' goto done; } - assert(tinfo.flags == 0); if (tinfo.btype == LFS_BTYPE_BTREE) { if (k == i) { // clobber this block @@ -1305,8 +1280,6 @@ code = ''' if (err == LFS_ERR_CORRUPT) { break; } - - assert(tinfo.flags == 0); } lfsr_traversal_close(&lfs, &t) => 0; @@ -1374,7 +1347,6 @@ code = ''' goto done; } - assert(tinfo.flags == 0); if (tinfo.btype == LFS_BTYPE_BTREE) { if (k == i) { // clobber this block @@ -1404,8 +1376,6 @@ code = ''' if (err == LFS_ERR_CORRUPT) { break; } - - assert(tinfo.flags == 0); } lfsr_traversal_close(&lfs, &t) => 0; @@ -1455,7 +1425,6 @@ code = ''' goto done; } - assert(tinfo.flags == 0); if (tinfo.btype == LFS_BTYPE_DATA) { if (k == i) { // clobber this block @@ -1486,8 +1455,6 @@ code = ''' if (err == LFS_ERR_CORRUPT) { break; } - - assert(tinfo.flags == 0); } lfsr_traversal_close(&lfs, &t) => 0; @@ -1553,7 +1520,6 @@ code = ''' goto done; } - assert(tinfo.flags == 0); if (tinfo.btype == LFS_BTYPE_DATA) { if (k == i) { // clobber this block @@ -1584,8 +1550,6 @@ code = ''' if (err == LFS_ERR_CORRUPT) { break; } - - assert(tinfo.flags == 0); } lfsr_traversal_close(&lfs, &t) => 0; @@ -1653,7 +1617,6 @@ code = ''' goto done; } - assert(tinfo.flags == 0); if (tinfo.btype == LFS_BTYPE_DATA) { if (k == i) { // clobber this block @@ -1684,8 +1647,6 @@ code = ''' if (err == LFS_ERR_CORRUPT) { break; } - - assert(tinfo.flags == 0); } lfsr_traversal_close(&lfs, &t) => 0; @@ -1727,7 +1688,6 @@ code = ''' struct lfs_tinfo tinfo; lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == ((WHEN <= 0) ? LFS_I_DIRTY : 0)); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); @@ -1739,7 +1699,6 @@ code = ''' } lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == ((WHEN <= 1) ? LFS_I_DIRTY : 0)); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); @@ -1784,7 +1743,6 @@ code = ''' lfsr_file_close(&lfs, &file) => 0; lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); lfsr_traversal_read(&lfs, &t, &tinfo) => LFS_ERR_NOENT; @@ -1836,7 +1794,6 @@ code = ''' struct lfs_tinfo tinfo; lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == ((WHEN <= 0) ? LFS_I_DIRTY : 0)); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); @@ -1845,7 +1802,6 @@ code = ''' } lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == ((WHEN <= 1) ? LFS_I_DIRTY : 0)); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); @@ -1888,7 +1844,6 @@ code = ''' struct lfs_tinfo tinfo; lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == ((WHEN <= 0) ? LFS_I_DIRTY : 0)); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); @@ -1897,7 +1852,6 @@ code = ''' } lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == ((WHEN <= 1) ? LFS_I_DIRTY : 0)); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); @@ -1940,7 +1894,6 @@ code = ''' struct lfs_tinfo tinfo; lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == ((WHEN <= 0) ? LFS_I_DIRTY : 0)); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); @@ -1949,7 +1902,6 @@ code = ''' } lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == ((WHEN <= 1) ? LFS_I_DIRTY : 0)); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); @@ -2018,8 +1970,6 @@ code = ''' if (err == LFS_ERR_NOENT) { break; } - - assert(tinfo.flags == LFS_I_DIRTY); } lfsr_traversal_close(&lfs, &t) => 0; @@ -2092,8 +2042,6 @@ code = ''' if (err == LFS_ERR_NOENT) { break; } - - assert(tinfo.flags == LFS_I_DIRTY); } lfsr_traversal_close(&lfs, &t) => 0; @@ -2162,11 +2110,9 @@ code = ''' // traverse mroot struct lfs_tinfo tinfo; lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); @@ -2243,20 +2189,16 @@ code = ''' // traverse mroot struct lfs_tinfo tinfo; lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); // traverse btree lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_BTREE); // traverse one data block lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_DATA); // rewrite the file @@ -2271,14 +2213,11 @@ code = ''' // traverse btree lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_BTREE); // traverse two data blocks lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); // we should be at end of traversal now lfsr_traversal_read(&lfs, &t, &tinfo) => LFS_ERR_NOENT; @@ -2342,16 +2281,13 @@ code = ''' // traverse mroot struct lfs_tinfo tinfo; lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); // traverse one data block lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_DATA); // rewrite the file @@ -2366,10 +2302,8 @@ code = ''' // traverse two data blocks lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); // we should be at end of traversal now lfsr_traversal_read(&lfs, &t, &tinfo) => LFS_ERR_NOENT; @@ -2431,11 +2365,9 @@ code = ''' // traverse mroot struct lfs_tinfo tinfo; lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); @@ -2511,20 +2443,16 @@ code = ''' // traverse mroot struct lfs_tinfo tinfo; lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); // traverse btree lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_BTREE); // traverse one data block lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_DATA); // rewrite the file @@ -2536,14 +2464,11 @@ code = ''' // traverse btree lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_BTREE); // traverse two data blocks lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); // we should be at end of traversal now lfsr_traversal_read(&lfs, &t, &tinfo) => LFS_ERR_NOENT; @@ -2609,16 +2534,13 @@ code = ''' // traverse mroot struct lfs_tinfo tinfo; lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); // traverse one data block lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_DATA); // rewrite the file @@ -2630,10 +2552,8 @@ code = ''' // traverse two data blocks lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); // we should be at end of traversal now lfsr_traversal_read(&lfs, &t, &tinfo) => LFS_ERR_NOENT; @@ -2700,11 +2620,9 @@ code = ''' // traverse mroot struct lfs_tinfo tinfo; lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); @@ -2784,20 +2702,16 @@ code = ''' // traverse mroot struct lfs_tinfo tinfo; lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); // traverse btree lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_BTREE); // traverse one data block lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_DATA); // close the file @@ -2808,14 +2722,11 @@ code = ''' // traverse btree lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == ((DESYNC) ? 0 : LFS_I_DIRTY)); assert(tinfo.btype == LFS_BTYPE_BTREE); // traverse two data blocks lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == ((DESYNC) ? 0 : LFS_I_DIRTY)); assert(tinfo.btype == LFS_BTYPE_DATA); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == ((DESYNC) ? 0 : LFS_I_DIRTY)); assert(tinfo.btype == LFS_BTYPE_DATA); // we should be at end of traversal now lfsr_traversal_read(&lfs, &t, &tinfo) => LFS_ERR_NOENT; @@ -2886,16 +2797,13 @@ code = ''' // traverse mroot struct lfs_tinfo tinfo; lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); // traverse one data block lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_DATA); // close the file @@ -2906,10 +2814,8 @@ code = ''' // traverse two data blocks lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == ((DESYNC) ? 0 : LFS_I_DIRTY)); assert(tinfo.btype == LFS_BTYPE_DATA); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == ((DESYNC) ? 0 : LFS_I_DIRTY)); assert(tinfo.btype == LFS_BTYPE_DATA); // we should be at end of traversal now lfsr_traversal_read(&lfs, &t, &tinfo) => LFS_ERR_NOENT; @@ -2980,16 +2886,13 @@ code = ''' // traverse mroot struct lfs_tinfo tinfo; lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); // traverse one data block lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_DATA); // remove the file @@ -2997,10 +2900,8 @@ code = ''' // traverse two data blocks lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); // we should be at end of traversal now lfsr_traversal_read(&lfs, &t, &tinfo) => LFS_ERR_NOENT; @@ -3069,16 +2970,13 @@ code = ''' // traverse mroot struct lfs_tinfo tinfo; lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); // traverse one data block lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_DATA); // rename one file over another @@ -3086,17 +2984,13 @@ code = ''' // traverse two data blocks lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); // traverse two data blocks lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); // we should be at end of traversal now lfsr_traversal_read(&lfs, &t, &tinfo) => LFS_ERR_NOENT; @@ -3170,16 +3064,13 @@ code = ''' // traverse mroot struct lfs_tinfo tinfo; lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); // traverse one data block lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_DATA); // rename one file over another @@ -3187,10 +3078,8 @@ code = ''' // traverse two data blocks lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); // we should be at end of traversal now lfsr_traversal_read(&lfs, &t, &tinfo) => LFS_ERR_NOENT; @@ -3255,7 +3144,6 @@ code = ''' // traverse mroot struct lfs_tinfo tinfo; lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); @@ -3272,31 +3160,23 @@ code = ''' // traverse mdir lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_MDIR); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_MDIR); // traverse two data blocks lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); // traverse mdir lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_MDIR); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_MDIR); // traverse two data blocks lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); // we should be at end of traversal now lfsr_traversal_read(&lfs, &t, &tinfo) => LFS_ERR_NOENT; @@ -3368,16 +3248,13 @@ code = ''' // traverse mroot struct lfs_tinfo tinfo; lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); // traverse a data block lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_DATA); // create enough files for mroot to split @@ -3393,28 +3270,21 @@ code = ''' // traverse another data block lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); // traverse two data blocks lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); // traverse mdir lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_MDIR); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_MDIR); // traverse two data blocks lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); // we should be at end of traversal now lfsr_traversal_read(&lfs, &t, &tinfo) => LFS_ERR_NOENT; @@ -3491,23 +3361,18 @@ code = ''' // traverse mroot struct lfs_tinfo tinfo; lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); // traverse two data blocks lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_DATA); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_DATA); // and another data block lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_DATA); // create enough files for mroot to split @@ -3523,14 +3388,11 @@ code = ''' // traverse another data block lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); // traverse two data blocks lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); // we should be at end of traversal now lfsr_traversal_read(&lfs, &t, &tinfo) => LFS_ERR_NOENT; @@ -3600,7 +3462,6 @@ code = ''' // traverse mroot struct lfs_tinfo tinfo; lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); @@ -3615,24 +3476,18 @@ code = ''' // traverse mroot lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_MDIR); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_MDIR); // traverse two data blocks lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); // traverse two data blocks lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); // we should be at end of traversal now lfsr_traversal_read(&lfs, &t, &tinfo) => LFS_ERR_NOENT; @@ -3697,16 +3552,13 @@ code = ''' // traverse mroot struct lfs_tinfo tinfo; lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); // traverse a data block lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_DATA); // rewrite enough files for mroot to extend @@ -3720,14 +3572,11 @@ code = ''' // traverse another data block lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); // traverse two data blocks lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); // we should be at end of traversal now lfsr_traversal_read(&lfs, &t, &tinfo) => LFS_ERR_NOENT; @@ -3801,7 +3650,6 @@ code = ''' // traverse mroot struct lfs_tinfo tinfo; lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); @@ -3821,24 +3669,18 @@ code = ''' // // traverse mroot lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_MDIR); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_MDIR); // traverse two data blocks lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); // traverse two data blocks lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); // we should be at end of traversal now lfsr_traversal_read(&lfs, &t, &tinfo) => LFS_ERR_NOENT; @@ -3912,22 +3754,17 @@ code = ''' // traverse mroots struct lfs_tinfo tinfo; lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); // traverse a data block lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_DATA); // rewrite enough files for mroot to relocate @@ -3942,14 +3779,11 @@ code = ''' // traverse another data block lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); // traverse two data blocks lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); // we should be at end of traversal now lfsr_traversal_read(&lfs, &t, &tinfo) => LFS_ERR_NOENT; @@ -4052,7 +3886,6 @@ code = ''' // traverse mroot struct lfs_tinfo tinfo; lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); @@ -4070,59 +3903,43 @@ code = ''' // traverse mdir lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_MDIR); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_MDIR); // traverse two data blocks lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); // traverse mdir lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_MDIR); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_MDIR); // traverse two data blocks lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); // traverse mdir lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_MDIR); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_MDIR); // traverse two data blocks lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); // traverse mdir lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_MDIR); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_MDIR); // traverse two data blocks lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); // we should be at end of traversal now lfsr_traversal_read(&lfs, &t, &tinfo) => LFS_ERR_NOENT; @@ -4235,41 +4052,31 @@ code = ''' // traverse mroot struct lfs_tinfo tinfo; lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); // traverse mtree lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_BTREE); // traverse mdir lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); // traverse two data blocks lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_DATA); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_DATA); // traverse mdir lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); // traverse one data block lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_DATA); // create enough files for mdir to split again @@ -4286,35 +4093,26 @@ code = ''' // traverse another data block lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); // traverse mdir lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_MDIR); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_MDIR); // traverse two data blocks lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); // traverse mdir lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_MDIR); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_MDIR); // traverse two data blocks lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); // we should be at end of traversal now lfsr_traversal_read(&lfs, &t, &tinfo) => LFS_ERR_NOENT; @@ -4427,48 +4225,36 @@ code = ''' // traverse mroot struct lfs_tinfo tinfo; lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); // traverse mtree lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_BTREE); // traverse mdir lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); // traverse two data blocks lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_DATA); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_DATA); // traverse mdir lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); // traverse two data blocks lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_DATA); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_DATA); // traverse one data block lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_DATA); // create enough files for mdir to split again @@ -4484,25 +4270,19 @@ code = ''' } // traverse another data block lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); // traverse mdir lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_MDIR); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_MDIR); // traverse two data blocks lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); // we should be at end of traversal now lfsr_traversal_read(&lfs, &t, &tinfo) => LFS_ERR_NOENT; - assert(tinfo.flags == LFS_I_DIRTY); lfsr_traversal_close(&lfs, &t) => 0; // check the file contents @@ -4618,7 +4398,6 @@ code = ''' // traverse mroot struct lfs_tinfo tinfo; lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); @@ -4633,52 +4412,38 @@ code = ''' // traverse mdir lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_MDIR); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_MDIR); // traverse two data blocks lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); // traverse mdir lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_MDIR); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_MDIR); // traverse two data blocks lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); // traverse two data blocks lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); // traverse mdir lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_MDIR); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_MDIR); // traverse two data blocks lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); // we should be at end of traversal now lfsr_traversal_read(&lfs, &t, &tinfo) => LFS_ERR_NOENT; @@ -4797,41 +4562,31 @@ code = ''' // traverse mroot struct lfs_tinfo tinfo; lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); // traverse mtree lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_BTREE); // traverse mdir lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); // traverse two data blocks lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_DATA); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_DATA); // traverse mdir lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); // traverse one data block lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_DATA); // rewrite enough files for mroot to extend @@ -4845,28 +4600,21 @@ code = ''' // traverse another data block lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); // traverse two data blocks lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); // traverse mdir lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_MDIR); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_MDIR); // traverse two data blocks lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); // we should be at end of traversal now lfsr_traversal_read(&lfs, &t, &tinfo) => LFS_ERR_NOENT; @@ -4990,7 +4738,6 @@ code = ''' // traverse mroot struct lfs_tinfo tinfo; lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); @@ -5006,52 +4753,38 @@ code = ''' // traverse mdir lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_MDIR); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_MDIR); // traverse two data blocks lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); // traverse mdir lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_MDIR); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_MDIR); // traverse two data blocks lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); // traverse two data blocks lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); // traverse mdir lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_MDIR); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_MDIR); // traverse two data blocks lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); // we should be at end of traversal now lfsr_traversal_read(&lfs, &t, &tinfo) => LFS_ERR_NOENT; @@ -5175,47 +4908,35 @@ code = ''' // traverse mroots struct lfs_tinfo tinfo; lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); // traverse mtree lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_BTREE); // traverse mdir lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); // traverse two data blocks lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_DATA); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_DATA); // traverse mdir lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); // traverse one data block lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_DATA); // rewrite enough files for mroot to relocate @@ -5230,28 +4951,21 @@ code = ''' // traverse another data block lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); // traverse two data blocks lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); // traverse mdir lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_MDIR); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_MDIR); // traverse two data blocks lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_DATA); // we should be at end of traversal now lfsr_traversal_read(&lfs, &t, &tinfo) => LFS_ERR_NOENT; @@ -5326,11 +5040,9 @@ code = ''' // traverse mroot struct lfs_tinfo tinfo; lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); lfsr_traversal_read(&lfs, &t, &tinfo) => LFS_ERR_NOENT; @@ -5420,19 +5132,15 @@ code = ''' // traverse mrootanchor struct lfs_tinfo tinfo; lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); // traverse mroot lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_MDIR); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_MDIR); lfsr_traversal_read(&lfs, &t, &tinfo) => LFS_ERR_NOENT; lfsr_traversal_close(&lfs, &t) => 0; @@ -5510,10 +5218,8 @@ code = ''' // traverse mroot struct lfs_tinfo tinfo; lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_MDIR); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_MDIR); lfsr_traversal_read(&lfs, &t, &tinfo) => LFS_ERR_NOENT; lfsr_traversal_close(&lfs, &t) => 0; @@ -5609,30 +5315,23 @@ code = ''' // traverse mroot struct lfs_tinfo tinfo; lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); // should have split, traverse mtree lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_BTREE); // traverse mdir lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_MDIR); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_MDIR); // traverse mdir lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_MDIR); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_MDIR); lfsr_traversal_read(&lfs, &t, &tinfo) => LFS_ERR_NOENT; lfsr_traversal_close(&lfs, &t) => 0; @@ -5785,37 +5484,28 @@ code = ''' // traverse mroot struct lfs_tinfo tinfo; lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); // traverse mtree lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_BTREE); // traverse mdir lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == ((COMPACTSET & 0x1) ? LFS_I_DIRTY : 0)); assert(tinfo.btype == LFS_BTYPE_MDIR); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == ((COMPACTSET & 0x1) ? LFS_I_DIRTY : 0)); assert(tinfo.btype == LFS_BTYPE_MDIR); // traverse mdir lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == ((COMPACTSET & 0x3) ? LFS_I_DIRTY : 0)); assert(tinfo.btype == LFS_BTYPE_MDIR); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == ((COMPACTSET & 0x3) ? LFS_I_DIRTY : 0)); assert(tinfo.btype == LFS_BTYPE_MDIR); // traverse mdir lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == ((COMPACTSET & 0x7) ? LFS_I_DIRTY : 0)); assert(tinfo.btype == LFS_BTYPE_MDIR); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == ((COMPACTSET & 0x7) ? LFS_I_DIRTY : 0)); assert(tinfo.btype == LFS_BTYPE_MDIR); lfsr_traversal_read(&lfs, &t, &tinfo) => LFS_ERR_NOENT; lfsr_traversal_close(&lfs, &t) => 0; @@ -5971,44 +5661,33 @@ code = ''' // traverse mroot struct lfs_tinfo tinfo; lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); // traverse mtree lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_BTREE); // traverse mdir lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); // traverse mdir lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_MDIR); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_MDIR); // should have split, traverse mdir lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_MDIR); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_MDIR); // traverse mdir lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_MDIR); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_MDIR); lfsr_traversal_read(&lfs, &t, &tinfo) => LFS_ERR_NOENT; lfsr_traversal_close(&lfs, &t) => 0; @@ -6164,30 +5843,23 @@ code = ''' // traverse mroot struct lfs_tinfo tinfo; lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); // traverse btree lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_BTREE); // traverse mdir lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_MDIR); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_MDIR); // traverse mdir lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_MDIR); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_MDIR); lfsr_traversal_read(&lfs, &t, &tinfo) => LFS_ERR_NOENT; lfsr_traversal_close(&lfs, &t) => 0; @@ -6275,16 +5947,13 @@ code = ''' // traverse mroot struct lfs_tinfo tinfo; lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); // traverse btree lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_BTREE); lfsr_traversal_read(&lfs, &t, &tinfo) => LFS_ERR_NOENT; lfsr_traversal_close(&lfs, &t) => 0; @@ -6358,16 +6027,13 @@ code = ''' // traverse mroot struct lfs_tinfo tinfo; lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); // traverse btree lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_BTREE); lfsr_traversal_read(&lfs, &t, &tinfo) => LFS_ERR_NOENT; lfsr_traversal_close(&lfs, &t) => 0; @@ -6438,16 +6104,13 @@ code = ''' // traverse mroot struct lfs_tinfo tinfo; lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); // traverse btree lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_BTREE); lfsr_traversal_read(&lfs, &t, &tinfo) => LFS_ERR_NOENT; lfsr_traversal_close(&lfs, &t) => 0; @@ -6543,24 +6206,19 @@ code = ''' // traverse mroot struct lfs_tinfo tinfo; lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == 0); assert(tinfo.btype == LFS_BTYPE_MDIR); assert(tinfo.block == 0 || tinfo.block == 1); // traverse btree lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_BTREE); // traverse btree lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_BTREE); // traverse btree lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_BTREE); lfsr_traversal_read(&lfs, &t, &tinfo) => LFS_ERR_NOENT; lfsr_traversal_close(&lfs, &t) => 0; @@ -6670,7 +6328,6 @@ code = ''' for (lfs_size_t i = 0; i < 5; i++) { // traverse bshrub lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_BTREE); } lfsr_traversal_read(&lfs, &t, &tinfo) => LFS_ERR_NOENT; @@ -6788,7 +6445,6 @@ code = ''' for (lfs_size_t i = 0; i < 5; i++) { // traverse bshrub lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_BTREE); } lfsr_traversal_read(&lfs, &t, &tinfo) => LFS_ERR_NOENT; @@ -6905,7 +6561,6 @@ code = ''' for (lfs_size_t i = 0; i < 5; i++) { // traverse bshrub lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_BTREE); } lfsr_traversal_read(&lfs, &t, &tinfo) => LFS_ERR_NOENT; @@ -7043,7 +6698,6 @@ code = ''' for (lfs_size_t i = 0; i < 3*5; i++) { // traverse bshrub lfsr_traversal_read(&lfs, &t, &tinfo) => 0; - assert(tinfo.flags == LFS_I_DIRTY); assert(tinfo.btype == LFS_BTYPE_BTREE); } lfsr_traversal_read(&lfs, &t, &tinfo) => LFS_ERR_NOENT;