bmap: Tweaked bmapcache algo to piggyback on mdir commits

There's really no reason to immediately commit the bmap to disk, at
least no until the first mdir commit, when we need to at least discard
the previous bmap state.

We already do all the gstate handling in lfs3_mdir_commit anyways, and
piggybacking on mdir commit lets us get rid of the annoying extra mdir
param in lfs3_alloc_ckpoint.

This does mean a slightly higher risk of needing to re-rebuild the bmap
after a powerloss, but in theory only if the user does something weird
like writing to a file and never calling sync. Most on-disk operations
terminate in an mdir commit as that's how any state change becomes
atomically visibile in littlefs.

Saves a nice bit of stack:

                code          stack          ctx
  before:      36920           2368          684
  after:       36920 (+0.0%)   2368 (+0.0%)  684 (+0.0%)

                code          stack          ctx
  bmap before: 38552           2472          812
  bmap after:  38464 (-0.2%)   2400 (-2.9%)  812 (+0.0%)
This commit is contained in:
Christopher Haster
2025-07-29 00:42:40 -05:00
parent 316ca1cc05
commit 726cccfe76
7 changed files with 141 additions and 152 deletions
+32 -43
View File
@@ -2380,7 +2380,7 @@ static inline bool lfs3_alloc_iserase(uint32_t flags) {
// blocks are allocated at most once, and never reallocated, between // blocks are allocated at most once, and never reallocated, between
// checkpoints // checkpoints
#if !defined(LFS3_RDONLY) #if !defined(LFS3_RDONLY)
static inline void lfs3_alloc_ckpoint(lfs3_t *lfs3, lfs3_mdir_t *mdir); static inline void lfs3_alloc_ckpoint(lfs3_t *lfs3);
#endif #endif
// discard any lookahead state, this is necessary if block_count changes // discard any lookahead state, this is necessary if block_count changes
@@ -10494,7 +10494,7 @@ dropped:;
: lfs3->cfg->block_size - lfs3->cfg->block_size/8); : lfs3->cfg->block_size - lfs3->cfg->block_size/8);
// checkpoint the allocator // checkpoint the allocator
lfs3_alloc_ckpoint(lfs3, mdir); lfs3_alloc_ckpoint(lfs3);
// compact the mdir // compact the mdir
err = lfs3_mdir_compact(lfs3, mdir); err = lfs3_mdir_compact(lfs3, mdir);
if (err) { if (err) {
@@ -10800,7 +10800,7 @@ static int lfs3_bmap_setbptr(lfs3_t *lfs3, lfs3_btree_t *bmap,
/// Block allocator /// /// Block allocator ///
// needed in lfs3_alloc_ckpoint // needed in lfs3_alloc_ckpoint
static int lfs3_alloc_rebuildbmap(lfs3_t *lfs3, lfs3_mdir_t *mdir); static int lfs3_alloc_rebuildbmap(lfs3_t *lfs3);
// checkpoint the allocator // checkpoint the allocator
// //
@@ -10810,7 +10810,7 @@ static int lfs3_alloc_rebuildbmap(lfs3_t *lfs3, lfs3_mdir_t *mdir);
// blocks are allocated at most once, and never reallocated, between // blocks are allocated at most once, and never reallocated, between
// checkpoints // checkpoints
#if !defined(LFS3_RDONLY) #if !defined(LFS3_RDONLY)
static inline void lfs3_alloc_ckpoint(lfs3_t *lfs3, lfs3_mdir_t *mdir) { static inline void lfs3_alloc_ckpoint(lfs3_t *lfs3) {
#ifndef LFS3_2BONLY #ifndef LFS3_2BONLY
lfs3->lookahead.ckpoint = lfs3->block_count; lfs3->lookahead.ckpoint = lfs3->block_count;
#ifdef LFS3_BMAP #ifdef LFS3_BMAP
@@ -10818,7 +10818,7 @@ static inline void lfs3_alloc_ckpoint(lfs3_t *lfs3, lfs3_mdir_t *mdir) {
if (lfs3->lookahead.bmapped < lfs3_min( if (lfs3->lookahead.bmapped < lfs3_min(
lfs3->cfg->bmap_scan_thresh, lfs3->cfg->bmap_scan_thresh,
lfs3->block_count)) { lfs3->block_count)) {
int err = lfs3_alloc_rebuildbmap(lfs3, mdir); int err = lfs3_alloc_rebuildbmap(lfs3);
// TODO lfs3_alloc_ckpoint should propagate errors // TODO lfs3_alloc_ckpoint should propagate errors
LFS3_ASSERT(!err); LFS3_ASSERT(!err);
} }
@@ -11276,7 +11276,7 @@ static lfs3_sblock_t lfs3_alloc(lfs3_t *lfs3, uint32_t flags) {
// //
// if NULL, we just commit to the mroot, and mroot chain extension can // if NULL, we just commit to the mroot, and mroot chain extension can
// take over if the wear gets too bad // take over if the wear gets too bad
static int lfs3_alloc_rebuildbmap(lfs3_t *lfs3, lfs3_mdir_t *mdir) { static int lfs3_alloc_rebuildbmap(lfs3_t *lfs3) {
// we should ckpoint before calling this // we should ckpoint before calling this
LFS3_ASSERT(lfs3->lookahead.ckpoint == lfs3->cfg->block_count); LFS3_ASSERT(lfs3->lookahead.ckpoint == lfs3->cfg->block_count);
LFS3_INFO("Rebuilding bmap " LFS3_INFO("Rebuilding bmap "
@@ -11284,7 +11284,6 @@ static int lfs3_alloc_rebuildbmap(lfs3_t *lfs3, lfs3_mdir_t *mdir) {
lfs3->lookahead.bmapped, lfs3->lookahead.bmapped,
lfs3->lookahead.ckpoint, lfs3->lookahead.ckpoint,
lfs3->cfg->block_count); lfs3->cfg->block_count);
lfs3_block_t bmapped = lfs3->lookahead.bmapped;
// create a new bmap // create a new bmap
lfs3_btree_t bmap_; lfs3_btree_t bmap_;
@@ -11324,25 +11323,17 @@ static int lfs3_alloc_rebuildbmap(lfs3_t *lfs3, lfs3_mdir_t *mdir) {
} }
} }
// commit the new bmap into gstate // update gbmap with what we found
// //
// lfs3_mdir_commit may immediately allocate from the bmap before it // we don't commit this to disk immediately, instead we piggypack on
// even hits the, but this is fine, lfs3_mdir_commit updates // the next mdir commit, most writes terminate in an mdir commit so
// window/known with alloc progress before any internal commits // this avoids extra writing at a risk of needing to reconstruct the
// bmap if we lose power
// //
// also note lfs3_mdir_commit reverts to on-disk state on failure // don't worry about window/known, lfs3_mdir_commit updates these
// lfs3->gbmap.window = (lfs3->lookahead.window + lfs3->lookahead.off) // last minute before calculating gdeltas for a commit
// % lfs3->cfg->block_count;
// lfs3->gbmap.known = ((lfs3->lookahead.ckpoint + lfs3->cfg->block_count)
// - lfs3->gbmap.window)
// % lfs3->cfg->block_count;
lfs3->lookahead.bmapped = lfs3->lookahead.ckpoint; lfs3->lookahead.bmapped = lfs3->lookahead.ckpoint;
lfs3->gbmap.b = bmap_; lfs3->gbmap.b = bmap_;
err = lfs3_mdir_commit(lfs3, (mdir) ? mdir : &lfs3->mroot, NULL, 0);
if (err) {
goto failed;
}
return 0; return 0;
failed:; failed:;
@@ -11355,8 +11346,6 @@ failed:;
lfs3->cfg->block_count); lfs3->cfg->block_count);
return 0; return 0;
} }
// revert bmapped on error
lfs3->lookahead.bmapped = bmapped;
return err; return err;
} }
#endif #endif
@@ -11486,7 +11475,7 @@ int lfs3_mkdir(lfs3_t *lfs3, const char *path) {
// mid updates, since the mid technically doesn't exist yet... // mid updates, since the mid technically doesn't exist yet...
// commit our bookmark and a grm to self-remove in case of powerloss // commit our bookmark and a grm to self-remove in case of powerloss
lfs3_alloc_ckpoint(lfs3, &mdir); lfs3_alloc_ckpoint(lfs3);
err = lfs3_mdir_commit(lfs3, &mdir, LFS3_RATTRS( err = lfs3_mdir_commit(lfs3, &mdir, LFS3_RATTRS(
LFS3_RATTR_NAME( LFS3_RATTR_NAME(
LFS3_TAG_BOOKMARK, +1, did_, NULL, 0), LFS3_TAG_BOOKMARK, +1, did_, NULL, 0),
@@ -11513,7 +11502,7 @@ int lfs3_mkdir(lfs3_t *lfs3, const char *path) {
// //
// commit our new directory into our parent, zeroing the grm in the // commit our new directory into our parent, zeroing the grm in the
// process // process
lfs3_alloc_ckpoint(lfs3, &mdir); lfs3_alloc_ckpoint(lfs3);
lfs3_grm_pop(lfs3); lfs3_grm_pop(lfs3);
err = lfs3_mdir_commit(lfs3, &mdir, LFS3_RATTRS( err = lfs3_mdir_commit(lfs3, &mdir, LFS3_RATTRS(
LFS3_RATTR_NAME( LFS3_RATTR_NAME(
@@ -11660,7 +11649,7 @@ int lfs3_remove(lfs3_t *lfs3, const char *path) {
bool zombie = lfs3_mid_isopen(lfs3, mdir.mid, -1); bool zombie = lfs3_mid_isopen(lfs3, mdir.mid, -1);
// remove the metadata entry // remove the metadata entry
lfs3_alloc_ckpoint(lfs3, &mdir); lfs3_alloc_ckpoint(lfs3);
err = lfs3_mdir_commit(lfs3, &mdir, LFS3_RATTRS( err = lfs3_mdir_commit(lfs3, &mdir, LFS3_RATTRS(
// create a stickynote if zombied // create a stickynote if zombied
// //
@@ -11841,7 +11830,7 @@ int lfs3_rename(lfs3_t *lfs3, const char *old_path, const char *new_path) {
// rename our entry, copying all tags associated with the old rid to the // rename our entry, copying all tags associated with the old rid to the
// new rid, while also marking the old rid for removal // new rid, while also marking the old rid for removal
lfs3_alloc_ckpoint(lfs3, &new_mdir); lfs3_alloc_ckpoint(lfs3);
err = lfs3_mdir_commit(lfs3, &new_mdir, LFS3_RATTRS( err = lfs3_mdir_commit(lfs3, &new_mdir, LFS3_RATTRS(
LFS3_RATTR_NAME( LFS3_RATTR_NAME(
LFS3_TAG_MASK12 | old_tag, LFS3_TAG_MASK12 | old_tag,
@@ -12282,7 +12271,7 @@ int lfs3_setattr(lfs3_t *lfs3, const char *path, uint8_t type,
} }
// commit our attr // commit our attr
lfs3_alloc_ckpoint(lfs3, &mdir); lfs3_alloc_ckpoint(lfs3);
err = lfs3_mdir_commit(lfs3, &mdir, LFS3_RATTRS( err = lfs3_mdir_commit(lfs3, &mdir, LFS3_RATTRS(
LFS3_RATTR_DATA( LFS3_RATTR_DATA(
LFS3_TAG_ATTR(type), 0, LFS3_TAG_ATTR(type), 0,
@@ -12338,7 +12327,7 @@ int lfs3_removeattr(lfs3_t *lfs3, const char *path, uint8_t type) {
} }
// commit our removal // commit our removal
lfs3_alloc_ckpoint(lfs3, &mdir); lfs3_alloc_ckpoint(lfs3);
err = lfs3_mdir_commit(lfs3, &mdir, LFS3_RATTRS( err = lfs3_mdir_commit(lfs3, &mdir, LFS3_RATTRS(
LFS3_RATTR( LFS3_RATTR(
LFS3_TAG_RM | LFS3_TAG_ATTR(type), 0))); LFS3_TAG_RM | LFS3_TAG_ATTR(type), 0)));
@@ -12637,7 +12626,7 @@ int lfs3_file_opencfg_(lfs3_t *lfs3, lfs3_file_t *file,
} else { } else {
// create a stickynote entry if we don't have one, this // create a stickynote entry if we don't have one, this
// reserves the mid until first sync // reserves the mid until first sync
lfs3_alloc_ckpoint(lfs3, &file->b.h.mdir); lfs3_alloc_ckpoint(lfs3);
err = lfs3_mdir_commit(lfs3, &file->b.h.mdir, LFS3_RATTRS( err = lfs3_mdir_commit(lfs3, &file->b.h.mdir, LFS3_RATTRS(
LFS3_RATTR_NAME( LFS3_RATTR_NAME(
LFS3_TAG_STICKYNOTE, +1, LFS3_TAG_STICKYNOTE, +1,
@@ -13590,7 +13579,7 @@ static int lfs3_file_crystallize(lfs3_t *lfs3, lfs3_file_t *file) {
LFS3_ASSERT(lfs3_o_isunsync(file->b.h.flags)); LFS3_ASSERT(lfs3_o_isunsync(file->b.h.flags));
// checkpoint the allocator // checkpoint the allocator
lfs3_alloc_ckpoint(lfs3, &file->b.h.mdir); lfs3_alloc_ckpoint(lfs3);
// finish crystallizing // finish crystallizing
int err = lfs3_file_crystallize_(lfs3, file, int err = lfs3_file_crystallize_(lfs3, file,
file->leaf.pos - lfs3_bptr_off(&file->leaf.bptr), -1, -1, file->leaf.pos - lfs3_bptr_off(&file->leaf.bptr), -1, -1,
@@ -13612,7 +13601,7 @@ static int lfs3_file_flushset_(lfs3_t *lfs3, lfs3_file_t *file,
lfs3_off_t pos = 0; lfs3_off_t pos = 0;
while (size > 0) { while (size > 0) {
// checkpoint the allocator // checkpoint the allocator
lfs3_alloc_ckpoint(lfs3, &file->b.h.mdir); lfs3_alloc_ckpoint(lfs3);
// enough data for a block? // enough data for a block?
#ifndef LFS3_2BONLY #ifndef LFS3_2BONLY
@@ -13712,7 +13701,7 @@ static int lfs3_file_flush_(lfs3_t *lfs3, lfs3_file_t *file,
#ifndef LFS3_2BONLY #ifndef LFS3_2BONLY
while (size > 0) { while (size > 0) {
// checkpoint the allocator // checkpoint the allocator
lfs3_alloc_ckpoint(lfs3, &file->b.h.mdir); lfs3_alloc_ckpoint(lfs3);
// mid-crystallization? can we just resume crystallizing? // mid-crystallization? can we just resume crystallizing?
// //
@@ -13961,7 +13950,7 @@ fragment:;
// iteratively write fragments (inlined leaves) // iteratively write fragments (inlined leaves)
while (size > 0) { while (size > 0) {
// checkpoint the allocator // checkpoint the allocator
lfs3_alloc_ckpoint(lfs3, &file->b.h.mdir); lfs3_alloc_ckpoint(lfs3);
// do we need to discard our leaf? we need to discard fragments // do we need to discard our leaf? we need to discard fragments
// in case the underlying rbyd compacts, and we need to discard // in case the underlying rbyd compacts, and we need to discard
@@ -14459,7 +14448,7 @@ static int lfs3_file_sync_(lfs3_t *lfs3, lfs3_file_t *file,
// make sure we don't overflow our rattr buffer // make sure we don't overflow our rattr buffer
LFS3_ASSERT(rattr_count <= sizeof(rattrs)/sizeof(lfs3_rattr_t)); LFS3_ASSERT(rattr_count <= sizeof(rattrs)/sizeof(lfs3_rattr_t));
// checkpoint the allocator // checkpoint the allocator
lfs3_alloc_ckpoint(lfs3, &file->b.h.mdir); lfs3_alloc_ckpoint(lfs3);
// and commit! // and commit!
int err = lfs3_mdir_commit(lfs3, &file->b.h.mdir, int err = lfs3_mdir_commit(lfs3, &file->b.h.mdir,
rattrs, rattr_count); rattrs, rattr_count);
@@ -14755,7 +14744,7 @@ int lfs3_file_truncate(lfs3_t *lfs3, lfs3_file_t *file, lfs3_off_t size_) {
file->b.h.flags |= LFS3_o_UNSYNC; file->b.h.flags |= LFS3_o_UNSYNC;
// checkpoint the allocator // checkpoint the allocator
lfs3_alloc_ckpoint(lfs3, &file->b.h.mdir); lfs3_alloc_ckpoint(lfs3);
// truncate our btree // truncate our btree
err = lfs3_file_graft_(lfs3, file, err = lfs3_file_graft_(lfs3, file,
lfs3_min(size, size_), size - lfs3_min(size, size_), lfs3_min(size, size_), size - lfs3_min(size, size_),
@@ -14837,7 +14826,7 @@ int lfs3_file_fruncate(lfs3_t *lfs3, lfs3_file_t *file, lfs3_off_t size_) {
file->b.h.flags |= LFS3_o_UNSYNC; file->b.h.flags |= LFS3_o_UNSYNC;
// checkpoint the allocator // checkpoint the allocator
lfs3_alloc_ckpoint(lfs3, &file->b.h.mdir); lfs3_alloc_ckpoint(lfs3);
// fruncate our btree // fruncate our btree
err = lfs3_file_graft_(lfs3, file, err = lfs3_file_graft_(lfs3, file,
0, lfs3_smax(size - size_, 0), 0, lfs3_smax(size - size_, 0),
@@ -16573,7 +16562,7 @@ static int lfs3_fs_fixgrm(lfs3_t *lfs3) {
lfs3_grm_t grm_p = lfs3->grm; lfs3_grm_t grm_p = lfs3->grm;
// checkpoint the allocator // checkpoint the allocator
lfs3_alloc_ckpoint(lfs3, &mdir); lfs3_alloc_ckpoint(lfs3);
// mark grm as taken care of // mark grm as taken care of
lfs3_grm_pop(lfs3); lfs3_grm_pop(lfs3);
// remove the rid while atomically updating our grm // remove the rid while atomically updating our grm
@@ -16628,7 +16617,7 @@ static int lfs3_mdir_mkconsistent(lfs3_t *lfs3, lfs3_mdir_t *mdir) {
lfs3_dbgmrid(lfs3, mdir->mid)); lfs3_dbgmrid(lfs3, mdir->mid));
// checkpoint the allocator // checkpoint the allocator
lfs3_alloc_ckpoint(lfs3, mdir); lfs3_alloc_ckpoint(lfs3);
// remove the orphaned stickynote // remove the orphaned stickynote
err = lfs3_mdir_commit(lfs3, mdir, LFS3_RATTRS( err = lfs3_mdir_commit(lfs3, mdir, LFS3_RATTRS(
LFS3_RATTR(LFS3_TAG_RM, -1))); LFS3_RATTR(LFS3_TAG_RM, -1)));
@@ -16781,7 +16770,7 @@ static int lfs3_fs_gc_(lfs3_t *lfs3, lfs3_trv_t *trv,
while (pending && (lfs3_off_t)steps > 0) { while (pending && (lfs3_off_t)steps > 0) {
// checkpoint the allocator to maximize any lookahead scans // checkpoint the allocator to maximize any lookahead scans
#ifndef LFS3_RDONLY #ifndef LFS3_RDONLY
lfs3_alloc_ckpoint(lfs3, NULL); lfs3_alloc_ckpoint(lfs3);
#endif #endif
// start a new traversal? // start a new traversal?
@@ -16921,7 +16910,7 @@ int lfs3_fs_grow(lfs3_t *lfs3, lfs3_size_t block_count_) {
lfs3_alloc_discard(lfs3); lfs3_alloc_discard(lfs3);
// update our on-disk config // update our on-disk config
lfs3_alloc_ckpoint(lfs3, NULL); lfs3_alloc_ckpoint(lfs3);
int err = lfs3_mdir_commit(lfs3, &lfs3->mroot, LFS3_RATTRS( int err = lfs3_mdir_commit(lfs3, &lfs3->mroot, LFS3_RATTRS(
LFS3_RATTR_GEOMETRY( LFS3_RATTR_GEOMETRY(
LFS3_TAG_GEOMETRY, 0, LFS3_TAG_GEOMETRY, 0,
@@ -17020,7 +17009,7 @@ int lfs3_trv_read(lfs3_t *lfs3, lfs3_trv_t *trv,
// checkpoint the allocator to maximize any lookahead scans // checkpoint the allocator to maximize any lookahead scans
#ifndef LFS3_RDONLY #ifndef LFS3_RDONLY
lfs3_alloc_ckpoint(lfs3, NULL); lfs3_alloc_ckpoint(lfs3);
#endif #endif
while (true) { while (true) {
+3 -3
View File
@@ -33,7 +33,7 @@ code = '''
lfs3_mount(&lfs3, LFS3_M_RDWR, &cfg) => 0; lfs3_mount(&lfs3, LFS3_M_RDWR, &cfg) => 0;
// start allocating // start allocating
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
lfs3_size_t alloced = 0; lfs3_size_t alloced = 0;
while (true) { while (true) {
lfs3_sblock_t block = lfs3_alloc(&lfs3, ERASE); lfs3_sblock_t block = lfs3_alloc(&lfs3, ERASE);
@@ -77,7 +77,7 @@ code = '''
lfs3_mount(&lfs3, LFS3_M_RDWR, &cfg) => 0; lfs3_mount(&lfs3, LFS3_M_RDWR, &cfg) => 0;
// start allocating // start allocating
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
lfs3_size_t alloced = 0; lfs3_size_t alloced = 0;
while (true) { while (true) {
lfs3_sblock_t block = lfs3_alloc(&lfs3, ERASE); lfs3_sblock_t block = lfs3_alloc(&lfs3, ERASE);
@@ -98,7 +98,7 @@ code = '''
assert(alloced == COUNT-2); assert(alloced == COUNT-2);
// ack again, effectively releasing all the previously alloced blocks // ack again, effectively releasing all the previously alloced blocks
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
alloced = 0; alloced = 0;
while (true) { while (true) {
lfs3_sblock_t block = lfs3_alloc(&lfs3, ERASE); lfs3_sblock_t block = lfs3_alloc(&lfs3, ERASE);
+3 -3
View File
@@ -61,7 +61,7 @@ code = '''
lfs3.lookahead.off = 0; lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size, lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2); CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
// create a btree // create a btree
lfs3_btree_t btree; lfs3_btree_t btree;
@@ -2016,7 +2016,7 @@ code = '''
lfs3.lookahead.off = 0; lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size, lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2); CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
// create a btree // create a btree
lfs3_btree_t btree; lfs3_btree_t btree;
@@ -3973,7 +3973,7 @@ code = '''
lfs3.lookahead.off = 0; lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size, lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2); CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
// create a btree // create a btree
lfs3_btree_t btree; lfs3_btree_t btree;
+6 -6
View File
@@ -9,7 +9,7 @@ code = '''
lfs3_t lfs3; lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR, CFG) => 0; lfs3_format(&lfs3, LFS3_F_RDWR, CFG) => 0;
lfs3_mount(&lfs3, LFS3_M_RDWR, CFG) => 0; lfs3_mount(&lfs3, LFS3_M_RDWR, CFG) => 0;
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
// create an initial bmap // create an initial bmap
lfs3_btree_t bmap; lfs3_btree_t bmap;
@@ -70,7 +70,7 @@ code = '''
lfs3_t lfs3; lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR, CFG) => 0; lfs3_format(&lfs3, LFS3_F_RDWR, CFG) => 0;
lfs3_mount(&lfs3, LFS3_M_RDWR, CFG) => 0; lfs3_mount(&lfs3, LFS3_M_RDWR, CFG) => 0;
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
// create an initial bmap // create an initial bmap
lfs3_btree_t bmap; lfs3_btree_t bmap;
@@ -135,7 +135,7 @@ code = '''
lfs3_t lfs3; lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR, CFG) => 0; lfs3_format(&lfs3, LFS3_F_RDWR, CFG) => 0;
lfs3_mount(&lfs3, LFS3_M_RDWR, CFG) => 0; lfs3_mount(&lfs3, LFS3_M_RDWR, CFG) => 0;
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
// create an initial bmap // create an initial bmap
lfs3_btree_t bmap; lfs3_btree_t bmap;
@@ -201,7 +201,7 @@ code = '''
lfs3_t lfs3; lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR, CFG) => 0; lfs3_format(&lfs3, LFS3_F_RDWR, CFG) => 0;
lfs3_mount(&lfs3, LFS3_M_RDWR, CFG) => 0; lfs3_mount(&lfs3, LFS3_M_RDWR, CFG) => 0;
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
// create an initial bmap // create an initial bmap
lfs3_btree_t bmap; lfs3_btree_t bmap;
@@ -268,7 +268,7 @@ code = '''
lfs3_t lfs3; lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR, CFG) => 0; lfs3_format(&lfs3, LFS3_F_RDWR, CFG) => 0;
lfs3_mount(&lfs3, LFS3_M_RDWR, CFG) => 0; lfs3_mount(&lfs3, LFS3_M_RDWR, CFG) => 0;
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
// create an initial bmap // create an initial bmap
lfs3_btree_t bmap; lfs3_btree_t bmap;
@@ -318,7 +318,7 @@ code = '''
lfs3_t lfs3; lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR, CFG) => 0; lfs3_format(&lfs3, LFS3_F_RDWR, CFG) => 0;
lfs3_mount(&lfs3, LFS3_M_RDWR, CFG) => 0; lfs3_mount(&lfs3, LFS3_M_RDWR, CFG) => 0;
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
// create an initial bmap // create an initial bmap
lfs3_btree_t bmap; lfs3_btree_t bmap;
+50 -50
View File
@@ -20,7 +20,7 @@ code = '''
lfs3.lookahead.off = 0; lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size, lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2); CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
// create an empty tree // create an empty tree
lfs3_btree_t btree; lfs3_btree_t btree;
@@ -52,7 +52,7 @@ code = '''
lfs3.lookahead.off = 0; lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size, lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2); CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
// create a single-entry tree // create a single-entry tree
lfs3_btree_t btree; lfs3_btree_t btree;
@@ -96,7 +96,7 @@ code = '''
lfs3.lookahead.off = 0; lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size, lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2); CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
// create a two-entry tree // create a two-entry tree
lfs3_btree_t btree; lfs3_btree_t btree;
@@ -147,7 +147,7 @@ code = '''
lfs3.lookahead.off = 0; lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size, lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2); CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
// create a two-entry tree // create a two-entry tree
lfs3_btree_t btree; lfs3_btree_t btree;
@@ -199,7 +199,7 @@ code = '''
lfs3.lookahead.off = 0; lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size, lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2); CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
// create a two-entry tree // create a two-entry tree
lfs3_btree_t btree; lfs3_btree_t btree;
@@ -259,7 +259,7 @@ code = '''
lfs3.lookahead.off = 0; lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size, lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2); CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
// create a two-entry tree // create a two-entry tree
lfs3_btree_t btree; lfs3_btree_t btree;
@@ -322,7 +322,7 @@ code = '''
lfs3.lookahead.off = 0; lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size, lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2); CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
// create a tree with N elements // create a tree with N elements
lfs3_btree_t btree; lfs3_btree_t btree;
@@ -374,7 +374,7 @@ code = '''
lfs3.lookahead.off = 0; lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size, lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2); CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
// create a tree with N elements // create a tree with N elements
lfs3_btree_t btree; lfs3_btree_t btree;
@@ -428,7 +428,7 @@ code = '''
lfs3.lookahead.off = 0; lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size, lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2); CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
// create a btree // create a btree
lfs3_btree_t btree; lfs3_btree_t btree;
@@ -512,7 +512,7 @@ code = '''
lfs3.lookahead.off = 0; lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size, lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2); CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
// create a tree with N elements // create a tree with N elements
lfs3_btree_t btree; lfs3_btree_t btree;
@@ -582,7 +582,7 @@ code = '''
lfs3.lookahead.off = 0; lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size, lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2); CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
// create a btree // create a btree
lfs3_btree_t btree; lfs3_btree_t btree;
@@ -720,7 +720,7 @@ code = '''
lfs3.lookahead.off = 0; lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size, lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2); CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
// create a single-entry tree // create a single-entry tree
lfs3_btree_t btree; lfs3_btree_t btree;
@@ -767,7 +767,7 @@ code = '''
lfs3.lookahead.off = 0; lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size, lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2); CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
// create a two-entry tree // create a two-entry tree
lfs3_btree_t btree; lfs3_btree_t btree;
@@ -827,7 +827,7 @@ code = '''
lfs3.lookahead.off = 0; lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size, lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2); CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
// create a two-entry tree // create a two-entry tree
lfs3_btree_t btree; lfs3_btree_t btree;
@@ -901,7 +901,7 @@ code = '''
lfs3.lookahead.off = 0; lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size, lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2); CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
// create a tree with N elements // create a tree with N elements
lfs3_btree_t btree; lfs3_btree_t btree;
@@ -960,7 +960,7 @@ code = '''
lfs3.lookahead.off = 0; lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size, lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2); CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
// create a btree // create a btree
lfs3_btree_t btree; lfs3_btree_t btree;
@@ -1048,7 +1048,7 @@ code = '''
lfs3.lookahead.off = 0; lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size, lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2); CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
// create a tree with N elements // create a tree with N elements
lfs3_btree_t btree; lfs3_btree_t btree;
@@ -1123,7 +1123,7 @@ code = '''
lfs3.lookahead.off = 0; lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size, lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2); CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
// create a btree // create a btree
lfs3_btree_t btree; lfs3_btree_t btree;
@@ -1268,7 +1268,7 @@ code = '''
lfs3.lookahead.off = 0; lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size, lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2); CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
// create a single-entry tree // create a single-entry tree
lfs3_btree_t btree; lfs3_btree_t btree;
@@ -1326,7 +1326,7 @@ code = '''
lfs3.lookahead.off = 0; lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size, lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2); CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
// create a single-entry tree // create a single-entry tree
lfs3_btree_t btree; lfs3_btree_t btree;
@@ -1400,7 +1400,7 @@ code = '''
lfs3.lookahead.off = 0; lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size, lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2); CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
// create a single-entry tree // create a single-entry tree
lfs3_btree_t btree; lfs3_btree_t btree;
@@ -1474,7 +1474,7 @@ code = '''
lfs3.lookahead.off = 0; lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size, lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2); CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
// create a single-entry tree // create a single-entry tree
lfs3_btree_t btree; lfs3_btree_t btree;
@@ -1567,7 +1567,7 @@ code = '''
lfs3.lookahead.off = 0; lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size, lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2); CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
// create a tree with N elements // create a tree with N elements
lfs3_btree_t btree; lfs3_btree_t btree;
@@ -1648,7 +1648,7 @@ code = '''
lfs3.lookahead.off = 0; lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size, lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2); CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
// create a tree with N elements // create a tree with N elements
lfs3_btree_t btree; lfs3_btree_t btree;
@@ -1732,7 +1732,7 @@ code = '''
lfs3.lookahead.off = 0; lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size, lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2); CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
// create a btree // create a btree
lfs3_btree_t btree; lfs3_btree_t btree;
@@ -1822,7 +1822,7 @@ code = '''
lfs3.lookahead.off = 0; lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size, lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2); CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
// create a tree with N elements // create a tree with N elements
lfs3_btree_t btree; lfs3_btree_t btree;
@@ -1930,7 +1930,7 @@ code = '''
lfs3.lookahead.off = 0; lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size, lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2); CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
// create a btree // create a btree
lfs3_btree_t btree; lfs3_btree_t btree;
@@ -2082,7 +2082,7 @@ code = '''
lfs3.lookahead.off = 0; lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size, lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2); CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
// create a tree with N elements // create a tree with N elements
lfs3_btree_t btree; lfs3_btree_t btree;
@@ -2143,7 +2143,7 @@ code = '''
lfs3.lookahead.off = 0; lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size, lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2); CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
// create a btree // create a btree
lfs3_btree_t btree; lfs3_btree_t btree;
@@ -2234,7 +2234,7 @@ code = '''
lfs3.lookahead.off = 0; lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size, lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2); CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
// create a tree with N elements // create a tree with N elements
lfs3_btree_t btree; lfs3_btree_t btree;
@@ -2296,7 +2296,7 @@ code = '''
lfs3.lookahead.off = 0; lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size, lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2); CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
// create a btree // create a btree
lfs3_btree_t btree; lfs3_btree_t btree;
@@ -2476,7 +2476,7 @@ code = '''
lfs3.lookahead.off = 0; lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size, lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2); CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
// create a tree // create a tree
lfs3_btree_t btree; lfs3_btree_t btree;
@@ -2547,7 +2547,7 @@ code = '''
lfs3.lookahead.off = 0; lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size, lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2); CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
// create a tree // create a tree
lfs3_btree_t btree; lfs3_btree_t btree;
@@ -2621,7 +2621,7 @@ code = '''
lfs3.lookahead.off = 0; lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size, lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2); CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
// create a tree // create a tree
lfs3_btree_t btree; lfs3_btree_t btree;
@@ -2688,7 +2688,7 @@ code = '''
lfs3.lookahead.off = 0; lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size, lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2); CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
// create a tree // create a tree
lfs3_btree_t btree; lfs3_btree_t btree;
@@ -2772,7 +2772,7 @@ code = '''
lfs3.lookahead.off = 0; lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size, lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2); CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
// create a btree // create a btree
lfs3_btree_t btree; lfs3_btree_t btree;
@@ -2880,7 +2880,7 @@ code = '''
lfs3.lookahead.off = 0; lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size, lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2); CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
// create a btree // create a btree
lfs3_btree_t btree; lfs3_btree_t btree;
@@ -3047,7 +3047,7 @@ code = '''
lfs3.lookahead.off = 0; lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size, lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2); CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
// create a zero-entry tree // create a zero-entry tree
lfs3_btree_t btree; lfs3_btree_t btree;
@@ -3079,7 +3079,7 @@ code = '''
lfs3.lookahead.off = 0; lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size, lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2); CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
// create a single-entry tree // create a single-entry tree
lfs3_btree_t btree; lfs3_btree_t btree;
@@ -3138,7 +3138,7 @@ code = '''
lfs3.lookahead.off = 0; lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size, lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2); CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
// create a two-entry tree // create a two-entry tree
lfs3_btree_t btree; lfs3_btree_t btree;
@@ -3214,7 +3214,7 @@ code = '''
lfs3.lookahead.off = 0; lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size, lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2); CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
// create a two-entry tree // create a two-entry tree
lfs3_btree_t btree; lfs3_btree_t btree;
@@ -3307,7 +3307,7 @@ code = '''
lfs3.lookahead.off = 0; lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size, lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2); CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
// create a two-entry tree // create a two-entry tree
lfs3_btree_t btree; lfs3_btree_t btree;
@@ -3401,7 +3401,7 @@ code = '''
lfs3.lookahead.off = 0; lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size, lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2); CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
// create a tree with N elements // create a tree with N elements
lfs3_btree_t btree; lfs3_btree_t btree;
@@ -3478,7 +3478,7 @@ code = '''
lfs3.lookahead.off = 0; lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size, lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2); CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
// create a btree // create a btree
lfs3_btree_t btree; lfs3_btree_t btree;
@@ -3596,7 +3596,7 @@ code = '''
lfs3.lookahead.off = 0; lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size, lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2); CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
// create a tree with N elements // create a tree with N elements
lfs3_btree_t btree; lfs3_btree_t btree;
@@ -3674,7 +3674,7 @@ code = '''
lfs3.lookahead.off = 0; lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size, lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2); CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
// create a btree // create a btree
lfs3_btree_t btree; lfs3_btree_t btree;
@@ -3833,7 +3833,7 @@ code = '''
lfs3.lookahead.off = 0; lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size, lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2); CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
// create a btree // create a btree
lfs3_btree_t btree; lfs3_btree_t btree;
@@ -4013,7 +4013,7 @@ code = '''
lfs3.lookahead.off = 0; lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size, lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2); CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
// create a btree // create a btree
lfs3_btree_t btree; lfs3_btree_t btree;
@@ -4241,7 +4241,7 @@ code = '''
lfs3.lookahead.off = 0; lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size, lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2); CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
// create a tree with N elements // create a tree with N elements
lfs3_btree_t btree; lfs3_btree_t btree;
@@ -4369,7 +4369,7 @@ code = '''
lfs3.lookahead.off = 0; lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size, lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2); CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
// create a btree // create a btree
lfs3_btree_t btree; lfs3_btree_t btree;
+1 -1
View File
@@ -1226,7 +1226,7 @@ code = '''
lfs3_file_sync(&lfs3, &file) => 0; lfs3_file_sync(&lfs3, &file) => 0;
// create an empty btree // create an empty btree
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
lfs3_rbyd_alloc(&lfs3, &file.b.shrub.r) => 0; lfs3_rbyd_alloc(&lfs3, &file.b.shrub.r) => 0;
lfs3_rbyd_commit(&lfs3, &file.b.shrub.r, 0, LFS3_RATTRS( lfs3_rbyd_commit(&lfs3, &file.b.shrub.r, 0, LFS3_RATTRS(
LFS3_RATTR_BUF(LFS3_TAG_DATA, +1, "?", 1))) => 0; LFS3_RATTR_BUF(LFS3_TAG_DATA, +1, "?", 1))) => 0;
+46 -46
View File
@@ -42,7 +42,7 @@ code = '''
lfs3_t lfs3; lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0; lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0;
lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0; lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0;
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
for (lfs3_size_t i = 0; i < N; i++) { for (lfs3_size_t i = 0; i < N; i++) {
lfs3_mdir_commit(&lfs3, &lfs3.mroot, LFS3_RATTRS( lfs3_mdir_commit(&lfs3, &lfs3.mroot, LFS3_RATTRS(
@@ -86,7 +86,7 @@ code = '''
lfs3_t lfs3; lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0; lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0;
lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0; lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0;
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
for (lfs3_size_t i = 0; i < N; i++) { for (lfs3_size_t i = 0; i < N; i++) {
// force mroot to compact // force mroot to compact
@@ -133,7 +133,7 @@ code = '''
lfs3_t lfs3; lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0; lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0;
lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0; lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0;
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
for (lfs3_size_t i = 0; i < N; i++) { for (lfs3_size_t i = 0; i < N; i++) {
lfs3_mdir_commit(&lfs3, &lfs3.mroot, LFS3_RATTRS( lfs3_mdir_commit(&lfs3, &lfs3.mroot, LFS3_RATTRS(
@@ -182,7 +182,7 @@ code = '''
lfs3_t lfs3; lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0; lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0;
lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0; lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0;
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
lfs3_data_t data; lfs3_data_t data;
// create a 2 large rattrs that needs to be uninlined // create a 2 large rattrs that needs to be uninlined
@@ -265,7 +265,7 @@ code = '''
lfs3_t lfs3; lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0; lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0;
lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0; lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0;
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
lfs3_data_t data; lfs3_data_t data;
// create 2 large entries that needs to be uninlined and split // create 2 large entries that needs to be uninlined and split
@@ -360,7 +360,7 @@ code = '''
lfs3_t lfs3; lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0; lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0;
lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0; lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0;
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
lfs3_data_t data; lfs3_data_t data;
// create 2 large entries that needs to be uninlined and split // create 2 large entries that needs to be uninlined and split
@@ -501,7 +501,7 @@ code = '''
lfs3_t lfs3; lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0; lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0;
lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0; lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0;
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
// create entries // create entries
for (lfs3_size_t i = 0; i < N; i++) { for (lfs3_size_t i = 0; i < N; i++) {
@@ -588,7 +588,7 @@ code = '''
lfs3_t lfs3; lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0; lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0;
lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0; lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0;
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
bool sim[N]; bool sim[N];
for (lfs3_size_t i = 0; i < N; i++) { for (lfs3_size_t i = 0; i < N; i++) {
@@ -697,7 +697,7 @@ code = '''
lfs3_t lfs3; lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0; lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0;
lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0; lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0;
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
lfs3_data_t data; lfs3_data_t data;
// create 2 large entries that needs to be uninlined and split // create 2 large entries that needs to be uninlined and split
@@ -791,7 +791,7 @@ code = '''
lfs3_t lfs3; lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0; lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0;
lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0; lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0;
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
lfs3_data_t data; lfs3_data_t data;
// create 2 large entries that needs to be uninlined and split // create 2 large entries that needs to be uninlined and split
@@ -887,7 +887,7 @@ code = '''
lfs3_t lfs3; lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0; lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0;
lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0; lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0;
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
lfs3_data_t data; lfs3_data_t data;
// create 2 large entries that needs to be uninlined and split // create 2 large entries that needs to be uninlined and split
@@ -964,7 +964,7 @@ code = '''
lfs3_t lfs3; lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0; lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0;
lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0; lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0;
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
lfs3_data_t data; lfs3_data_t data;
// create 2 large entries that needs to be uninlined and split // create 2 large entries that needs to be uninlined and split
@@ -1084,7 +1084,7 @@ code = '''
lfs3_t lfs3; lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0; lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0;
lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0; lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0;
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
lfs3_data_t data; lfs3_data_t data;
// create 2 large entries that needs to be uninlined and split // create 2 large entries that needs to be uninlined and split
@@ -1206,7 +1206,7 @@ code = '''
lfs3_t lfs3; lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0; lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0;
lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0; lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0;
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
bool sim[N]; bool sim[N];
for (lfs3_size_t i = 0; i < N; i++) { for (lfs3_size_t i = 0; i < N; i++) {
@@ -1343,7 +1343,7 @@ code = '''
lfs3_t lfs3; lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0; lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0;
lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0; lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0;
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
lfs3_data_t data; lfs3_data_t data;
// create a 2 large rattrs that needs to be uninlined // create a 2 large rattrs that needs to be uninlined
@@ -1469,7 +1469,7 @@ code = '''
lfs3_t lfs3; lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0; lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0;
lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0; lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0;
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
lfs3_data_t data; lfs3_data_t data;
// create 2 large entries that needs to be uninlined and split // create 2 large entries that needs to be uninlined and split
@@ -1609,7 +1609,7 @@ code = '''
lfs3_t lfs3; lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0; lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0;
lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0; lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0;
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
lfs3_data_t data; lfs3_data_t data;
// create 2 large entries that needs to be uninlined and split // create 2 large entries that needs to be uninlined and split
@@ -1749,7 +1749,7 @@ code = '''
lfs3_t lfs3; lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0; lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0;
lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0; lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0;
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
lfs3_data_t data; lfs3_data_t data;
// prepare mroot with an entry // prepare mroot with an entry
@@ -1832,7 +1832,7 @@ code = '''
lfs3_t lfs3; lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0; lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0;
lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0; lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0;
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
lfs3_data_t data; lfs3_data_t data;
// prepare mroot with an entry // prepare mroot with an entry
@@ -1970,7 +1970,7 @@ code = '''
lfs3_t lfs3; lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0; lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0;
lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0; lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0;
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
lfs3_data_t data; lfs3_data_t data;
// prepare mroot with an entry // prepare mroot with an entry
@@ -2081,7 +2081,7 @@ code = '''
lfs3_t lfs3; lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0; lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0;
lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0; lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0;
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
lfs3_data_t data; lfs3_data_t data;
// create 2 large entries that needs to be uninlined and split // create 2 large entries that needs to be uninlined and split
@@ -2226,7 +2226,7 @@ code = '''
lfs3_t lfs3; lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0; lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0;
lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0; lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0;
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
lfs3_data_t data; lfs3_data_t data;
// create 2 large entries that needs to be uninlined and split // create 2 large entries that needs to be uninlined and split
@@ -2388,7 +2388,7 @@ code = '''
lfs3_t lfs3; lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0; lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0;
lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0; lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0;
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
lfs3_data_t data; lfs3_data_t data;
// create 2 large entries that needs to be uninlined and split // create 2 large entries that needs to be uninlined and split
@@ -2495,7 +2495,7 @@ code = '''
lfs3_t lfs3; lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0; lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0;
lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0; lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0;
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
// force mroot to compact once, so the second compact below will // force mroot to compact once, so the second compact below will
// trigger a relocation // trigger a relocation
@@ -2588,7 +2588,7 @@ code = '''
lfs3_t lfs3; lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0; lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0;
lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0; lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0;
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
// force mroot to compact once, so the second compact below will // force mroot to compact once, so the second compact below will
// trigger a relocation // trigger a relocation
@@ -2695,7 +2695,7 @@ code = '''
lfs3_t lfs3; lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0; lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0;
lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0; lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0;
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
bool sim[N]; bool sim[N];
for (lfs3_size_t i = 0; i < N; i++) { for (lfs3_size_t i = 0; i < N; i++) {
@@ -2857,7 +2857,7 @@ code = '''
lfs3_t lfs3; lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0; lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0;
lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0; lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0;
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
// setup our neighbors // setup our neighbors
lfs3_handle_t left = {.flags=0}; lfs3_handle_t left = {.flags=0};
@@ -2917,7 +2917,7 @@ code = '''
lfs3_t lfs3; lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0; lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0;
lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0; lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0;
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
// setup our neighbors // setup our neighbors
lfs3_handle_t left = {.flags=0}; lfs3_handle_t left = {.flags=0};
@@ -2967,7 +2967,7 @@ code = '''
lfs3_t lfs3; lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0; lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0;
lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0; lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0;
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
// setup our neighbors // setup our neighbors
lfs3_handle_t left = {.flags=0}; lfs3_handle_t left = {.flags=0};
@@ -3019,7 +3019,7 @@ code = '''
lfs3_t lfs3; lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0; lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0;
lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0; lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0;
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
// setup our neighbors // setup our neighbors
lfs3_handle_t left = {.flags=0}; lfs3_handle_t left = {.flags=0};
@@ -3096,7 +3096,7 @@ code = '''
lfs3_t lfs3; lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0; lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0;
lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0; lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0;
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
// setup our neighbors // setup our neighbors
lfs3_handle_t left = {.flags=0}; lfs3_handle_t left = {.flags=0};
@@ -3187,7 +3187,7 @@ code = '''
lfs3_t lfs3; lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0; lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0;
lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0; lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0;
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
// setup our neighbors // setup our neighbors
lfs3_handle_t left = {.flags=0}; lfs3_handle_t left = {.flags=0};
@@ -3245,7 +3245,7 @@ code = '''
lfs3_t lfs3; lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0; lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0;
lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0; lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0;
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
// setup our neighbors // setup our neighbors
lfs3_handle_t left = {.flags=0}; lfs3_handle_t left = {.flags=0};
@@ -3342,7 +3342,7 @@ code = '''
lfs3_t lfs3; lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0; lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0;
lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0; lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0;
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
// setup our neighbors // setup our neighbors
lfs3_handle_t left = {.flags=0}; lfs3_handle_t left = {.flags=0};
@@ -3437,7 +3437,7 @@ code = '''
lfs3_t lfs3; lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0; lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0;
lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0; lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0;
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
// setup our neighbors // setup our neighbors
lfs3_handle_t left = {.flags=0}; lfs3_handle_t left = {.flags=0};
@@ -3547,7 +3547,7 @@ code = '''
lfs3_t lfs3; lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0; lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0;
lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0; lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0;
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
// setup our neighbors // setup our neighbors
lfs3_handle_t left = {.flags=0}; lfs3_handle_t left = {.flags=0};
@@ -3651,7 +3651,7 @@ code = '''
lfs3_t lfs3; lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0; lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0;
lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0; lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0;
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
// insert at least one entry // insert at least one entry
lfs3_mdir_t mdir; lfs3_mdir_t mdir;
@@ -3757,7 +3757,7 @@ code = '''
lfs3_t lfs3; lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0; lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0;
lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0; lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0;
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
lfs3_data_t data; lfs3_data_t data;
// create a 2 large rattrs that needs to be uninlined // create a 2 large rattrs that needs to be uninlined
@@ -3897,7 +3897,7 @@ code = '''
lfs3_t lfs3; lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0; lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0;
lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0; lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0;
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
lfs3_data_t data; lfs3_data_t data;
// create 2 large entries that needs to be uninlined and split // create 2 large entries that needs to be uninlined and split
@@ -4049,7 +4049,7 @@ code = '''
lfs3_t lfs3; lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0; lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0;
lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0; lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0;
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
lfs3_data_t data; lfs3_data_t data;
// create 2 large entries that needs to be uninlined and split // create 2 large entries that needs to be uninlined and split
@@ -4234,7 +4234,7 @@ code = '''
lfs3_t lfs3; lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0; lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0;
lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0; lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0;
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
// insert at least one entry // insert at least one entry
lfs3_mdir_t mdir; lfs3_mdir_t mdir;
@@ -4353,7 +4353,7 @@ code = '''
lfs3_t lfs3; lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0; lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0;
lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0; lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0;
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
// create entries // create entries
for (lfs3_size_t i = 0; i < N; i++) { for (lfs3_size_t i = 0; i < N; i++) {
@@ -4505,7 +4505,7 @@ code = '''
lfs3_t lfs3; lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0; lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0;
lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0; lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0;
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
bool sim[N]; bool sim[N];
for (lfs3_size_t i = 0; i < N; i++) { for (lfs3_size_t i = 0; i < N; i++) {
@@ -4678,7 +4678,7 @@ code = '''
lfs3_t lfs3; lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0; lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0;
lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0; lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0;
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
lfs3_mdir_commit(&lfs3, &lfs3.mroot, LFS3_RATTRS( lfs3_mdir_commit(&lfs3, &lfs3.mroot, LFS3_RATTRS(
LFS3_RATTR_MPTR( LFS3_RATTR_MPTR(
@@ -4998,7 +4998,7 @@ code = '''
lfs3_t lfs3; lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0; lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0;
lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0; lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0;
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
lfs3_data_t data; lfs3_data_t data;
// prepare mroot with an entry // prepare mroot with an entry
@@ -5058,7 +5058,7 @@ code = '''
lfs3_t lfs3; lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0; lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0;
lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0; lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0;
lfs3_alloc_ckpoint(&lfs3, NULL); lfs3_alloc_ckpoint(&lfs3);
lfs3_data_t data; lfs3_data_t data;
// prepare mroot with an entry // prepare mroot with an entry