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
+3 -3
View File
@@ -33,7 +33,7 @@ code = '''
lfs3_mount(&lfs3, LFS3_M_RDWR, &cfg) => 0;
// start allocating
lfs3_alloc_ckpoint(&lfs3, NULL);
lfs3_alloc_ckpoint(&lfs3);
lfs3_size_t alloced = 0;
while (true) {
lfs3_sblock_t block = lfs3_alloc(&lfs3, ERASE);
@@ -77,7 +77,7 @@ code = '''
lfs3_mount(&lfs3, LFS3_M_RDWR, &cfg) => 0;
// start allocating
lfs3_alloc_ckpoint(&lfs3, NULL);
lfs3_alloc_ckpoint(&lfs3);
lfs3_size_t alloced = 0;
while (true) {
lfs3_sblock_t block = lfs3_alloc(&lfs3, ERASE);
@@ -98,7 +98,7 @@ code = '''
assert(alloced == COUNT-2);
// ack again, effectively releasing all the previously alloced blocks
lfs3_alloc_ckpoint(&lfs3, NULL);
lfs3_alloc_ckpoint(&lfs3);
alloced = 0;
while (true) {
lfs3_sblock_t block = lfs3_alloc(&lfs3, ERASE);
+3 -3
View File
@@ -61,7 +61,7 @@ code = '''
lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL);
lfs3_alloc_ckpoint(&lfs3);
// create a btree
lfs3_btree_t btree;
@@ -2016,7 +2016,7 @@ code = '''
lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL);
lfs3_alloc_ckpoint(&lfs3);
// create a btree
lfs3_btree_t btree;
@@ -3973,7 +3973,7 @@ code = '''
lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL);
lfs3_alloc_ckpoint(&lfs3);
// create a btree
lfs3_btree_t btree;
+6 -6
View File
@@ -9,7 +9,7 @@ code = '''
lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR, CFG) => 0;
lfs3_mount(&lfs3, LFS3_M_RDWR, CFG) => 0;
lfs3_alloc_ckpoint(&lfs3, NULL);
lfs3_alloc_ckpoint(&lfs3);
// create an initial bmap
lfs3_btree_t bmap;
@@ -70,7 +70,7 @@ code = '''
lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR, CFG) => 0;
lfs3_mount(&lfs3, LFS3_M_RDWR, CFG) => 0;
lfs3_alloc_ckpoint(&lfs3, NULL);
lfs3_alloc_ckpoint(&lfs3);
// create an initial bmap
lfs3_btree_t bmap;
@@ -135,7 +135,7 @@ code = '''
lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR, CFG) => 0;
lfs3_mount(&lfs3, LFS3_M_RDWR, CFG) => 0;
lfs3_alloc_ckpoint(&lfs3, NULL);
lfs3_alloc_ckpoint(&lfs3);
// create an initial bmap
lfs3_btree_t bmap;
@@ -201,7 +201,7 @@ code = '''
lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR, CFG) => 0;
lfs3_mount(&lfs3, LFS3_M_RDWR, CFG) => 0;
lfs3_alloc_ckpoint(&lfs3, NULL);
lfs3_alloc_ckpoint(&lfs3);
// create an initial bmap
lfs3_btree_t bmap;
@@ -268,7 +268,7 @@ code = '''
lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR, CFG) => 0;
lfs3_mount(&lfs3, LFS3_M_RDWR, CFG) => 0;
lfs3_alloc_ckpoint(&lfs3, NULL);
lfs3_alloc_ckpoint(&lfs3);
// create an initial bmap
lfs3_btree_t bmap;
@@ -318,7 +318,7 @@ code = '''
lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR, CFG) => 0;
lfs3_mount(&lfs3, LFS3_M_RDWR, CFG) => 0;
lfs3_alloc_ckpoint(&lfs3, NULL);
lfs3_alloc_ckpoint(&lfs3);
// create an initial bmap
lfs3_btree_t bmap;
+50 -50
View File
@@ -20,7 +20,7 @@ code = '''
lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL);
lfs3_alloc_ckpoint(&lfs3);
// create an empty tree
lfs3_btree_t btree;
@@ -52,7 +52,7 @@ code = '''
lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL);
lfs3_alloc_ckpoint(&lfs3);
// create a single-entry tree
lfs3_btree_t btree;
@@ -96,7 +96,7 @@ code = '''
lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL);
lfs3_alloc_ckpoint(&lfs3);
// create a two-entry tree
lfs3_btree_t btree;
@@ -147,7 +147,7 @@ code = '''
lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL);
lfs3_alloc_ckpoint(&lfs3);
// create a two-entry tree
lfs3_btree_t btree;
@@ -199,7 +199,7 @@ code = '''
lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL);
lfs3_alloc_ckpoint(&lfs3);
// create a two-entry tree
lfs3_btree_t btree;
@@ -259,7 +259,7 @@ code = '''
lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL);
lfs3_alloc_ckpoint(&lfs3);
// create a two-entry tree
lfs3_btree_t btree;
@@ -322,7 +322,7 @@ code = '''
lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL);
lfs3_alloc_ckpoint(&lfs3);
// create a tree with N elements
lfs3_btree_t btree;
@@ -374,7 +374,7 @@ code = '''
lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL);
lfs3_alloc_ckpoint(&lfs3);
// create a tree with N elements
lfs3_btree_t btree;
@@ -428,7 +428,7 @@ code = '''
lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL);
lfs3_alloc_ckpoint(&lfs3);
// create a btree
lfs3_btree_t btree;
@@ -512,7 +512,7 @@ code = '''
lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL);
lfs3_alloc_ckpoint(&lfs3);
// create a tree with N elements
lfs3_btree_t btree;
@@ -582,7 +582,7 @@ code = '''
lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL);
lfs3_alloc_ckpoint(&lfs3);
// create a btree
lfs3_btree_t btree;
@@ -720,7 +720,7 @@ code = '''
lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL);
lfs3_alloc_ckpoint(&lfs3);
// create a single-entry tree
lfs3_btree_t btree;
@@ -767,7 +767,7 @@ code = '''
lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL);
lfs3_alloc_ckpoint(&lfs3);
// create a two-entry tree
lfs3_btree_t btree;
@@ -827,7 +827,7 @@ code = '''
lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL);
lfs3_alloc_ckpoint(&lfs3);
// create a two-entry tree
lfs3_btree_t btree;
@@ -901,7 +901,7 @@ code = '''
lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL);
lfs3_alloc_ckpoint(&lfs3);
// create a tree with N elements
lfs3_btree_t btree;
@@ -960,7 +960,7 @@ code = '''
lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL);
lfs3_alloc_ckpoint(&lfs3);
// create a btree
lfs3_btree_t btree;
@@ -1048,7 +1048,7 @@ code = '''
lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL);
lfs3_alloc_ckpoint(&lfs3);
// create a tree with N elements
lfs3_btree_t btree;
@@ -1123,7 +1123,7 @@ code = '''
lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL);
lfs3_alloc_ckpoint(&lfs3);
// create a btree
lfs3_btree_t btree;
@@ -1268,7 +1268,7 @@ code = '''
lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL);
lfs3_alloc_ckpoint(&lfs3);
// create a single-entry tree
lfs3_btree_t btree;
@@ -1326,7 +1326,7 @@ code = '''
lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL);
lfs3_alloc_ckpoint(&lfs3);
// create a single-entry tree
lfs3_btree_t btree;
@@ -1400,7 +1400,7 @@ code = '''
lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL);
lfs3_alloc_ckpoint(&lfs3);
// create a single-entry tree
lfs3_btree_t btree;
@@ -1474,7 +1474,7 @@ code = '''
lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL);
lfs3_alloc_ckpoint(&lfs3);
// create a single-entry tree
lfs3_btree_t btree;
@@ -1567,7 +1567,7 @@ code = '''
lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL);
lfs3_alloc_ckpoint(&lfs3);
// create a tree with N elements
lfs3_btree_t btree;
@@ -1648,7 +1648,7 @@ code = '''
lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL);
lfs3_alloc_ckpoint(&lfs3);
// create a tree with N elements
lfs3_btree_t btree;
@@ -1732,7 +1732,7 @@ code = '''
lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL);
lfs3_alloc_ckpoint(&lfs3);
// create a btree
lfs3_btree_t btree;
@@ -1822,7 +1822,7 @@ code = '''
lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL);
lfs3_alloc_ckpoint(&lfs3);
// create a tree with N elements
lfs3_btree_t btree;
@@ -1930,7 +1930,7 @@ code = '''
lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL);
lfs3_alloc_ckpoint(&lfs3);
// create a btree
lfs3_btree_t btree;
@@ -2082,7 +2082,7 @@ code = '''
lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL);
lfs3_alloc_ckpoint(&lfs3);
// create a tree with N elements
lfs3_btree_t btree;
@@ -2143,7 +2143,7 @@ code = '''
lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL);
lfs3_alloc_ckpoint(&lfs3);
// create a btree
lfs3_btree_t btree;
@@ -2234,7 +2234,7 @@ code = '''
lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL);
lfs3_alloc_ckpoint(&lfs3);
// create a tree with N elements
lfs3_btree_t btree;
@@ -2296,7 +2296,7 @@ code = '''
lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL);
lfs3_alloc_ckpoint(&lfs3);
// create a btree
lfs3_btree_t btree;
@@ -2476,7 +2476,7 @@ code = '''
lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL);
lfs3_alloc_ckpoint(&lfs3);
// create a tree
lfs3_btree_t btree;
@@ -2547,7 +2547,7 @@ code = '''
lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL);
lfs3_alloc_ckpoint(&lfs3);
// create a tree
lfs3_btree_t btree;
@@ -2621,7 +2621,7 @@ code = '''
lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL);
lfs3_alloc_ckpoint(&lfs3);
// create a tree
lfs3_btree_t btree;
@@ -2688,7 +2688,7 @@ code = '''
lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL);
lfs3_alloc_ckpoint(&lfs3);
// create a tree
lfs3_btree_t btree;
@@ -2772,7 +2772,7 @@ code = '''
lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL);
lfs3_alloc_ckpoint(&lfs3);
// create a btree
lfs3_btree_t btree;
@@ -2880,7 +2880,7 @@ code = '''
lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL);
lfs3_alloc_ckpoint(&lfs3);
// create a btree
lfs3_btree_t btree;
@@ -3047,7 +3047,7 @@ code = '''
lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL);
lfs3_alloc_ckpoint(&lfs3);
// create a zero-entry tree
lfs3_btree_t btree;
@@ -3079,7 +3079,7 @@ code = '''
lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL);
lfs3_alloc_ckpoint(&lfs3);
// create a single-entry tree
lfs3_btree_t btree;
@@ -3138,7 +3138,7 @@ code = '''
lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL);
lfs3_alloc_ckpoint(&lfs3);
// create a two-entry tree
lfs3_btree_t btree;
@@ -3214,7 +3214,7 @@ code = '''
lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL);
lfs3_alloc_ckpoint(&lfs3);
// create a two-entry tree
lfs3_btree_t btree;
@@ -3307,7 +3307,7 @@ code = '''
lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL);
lfs3_alloc_ckpoint(&lfs3);
// create a two-entry tree
lfs3_btree_t btree;
@@ -3401,7 +3401,7 @@ code = '''
lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL);
lfs3_alloc_ckpoint(&lfs3);
// create a tree with N elements
lfs3_btree_t btree;
@@ -3478,7 +3478,7 @@ code = '''
lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL);
lfs3_alloc_ckpoint(&lfs3);
// create a btree
lfs3_btree_t btree;
@@ -3596,7 +3596,7 @@ code = '''
lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL);
lfs3_alloc_ckpoint(&lfs3);
// create a tree with N elements
lfs3_btree_t btree;
@@ -3674,7 +3674,7 @@ code = '''
lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL);
lfs3_alloc_ckpoint(&lfs3);
// create a btree
lfs3_btree_t btree;
@@ -3833,7 +3833,7 @@ code = '''
lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL);
lfs3_alloc_ckpoint(&lfs3);
// create a btree
lfs3_btree_t btree;
@@ -4013,7 +4013,7 @@ code = '''
lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL);
lfs3_alloc_ckpoint(&lfs3);
// create a btree
lfs3_btree_t btree;
@@ -4241,7 +4241,7 @@ code = '''
lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL);
lfs3_alloc_ckpoint(&lfs3);
// create a tree with N elements
lfs3_btree_t btree;
@@ -4369,7 +4369,7 @@ code = '''
lfs3.lookahead.off = 0;
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
CFG->block_count-2);
lfs3_alloc_ckpoint(&lfs3, NULL);
lfs3_alloc_ckpoint(&lfs3);
// create a btree
lfs3_btree_t btree;
+1 -1
View File
@@ -1226,7 +1226,7 @@ code = '''
lfs3_file_sync(&lfs3, &file) => 0;
// create an empty btree
lfs3_alloc_ckpoint(&lfs3, NULL);
lfs3_alloc_ckpoint(&lfs3);
lfs3_rbyd_alloc(&lfs3, &file.b.shrub.r) => 0;
lfs3_rbyd_commit(&lfs3, &file.b.shrub.r, 0, LFS3_RATTRS(
LFS3_RATTR_BUF(LFS3_TAG_DATA, +1, "?", 1))) => 0;
+46 -46
View File
@@ -42,7 +42,7 @@ code = '''
lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_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++) {
lfs3_mdir_commit(&lfs3, &lfs3.mroot, LFS3_RATTRS(
@@ -86,7 +86,7 @@ code = '''
lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_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++) {
// force mroot to compact
@@ -133,7 +133,7 @@ code = '''
lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_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++) {
lfs3_mdir_commit(&lfs3, &lfs3.mroot, LFS3_RATTRS(
@@ -182,7 +182,7 @@ code = '''
lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_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;
// create a 2 large rattrs that needs to be uninlined
@@ -265,7 +265,7 @@ code = '''
lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_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;
// create 2 large entries that needs to be uninlined and split
@@ -360,7 +360,7 @@ code = '''
lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_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;
// create 2 large entries that needs to be uninlined and split
@@ -501,7 +501,7 @@ code = '''
lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0;
lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0;
lfs3_alloc_ckpoint(&lfs3, NULL);
lfs3_alloc_ckpoint(&lfs3);
// create entries
for (lfs3_size_t i = 0; i < N; i++) {
@@ -588,7 +588,7 @@ code = '''
lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_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];
for (lfs3_size_t i = 0; i < N; i++) {
@@ -697,7 +697,7 @@ code = '''
lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_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;
// create 2 large entries that needs to be uninlined and split
@@ -791,7 +791,7 @@ code = '''
lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_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;
// create 2 large entries that needs to be uninlined and split
@@ -887,7 +887,7 @@ code = '''
lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_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;
// create 2 large entries that needs to be uninlined and split
@@ -964,7 +964,7 @@ code = '''
lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_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;
// create 2 large entries that needs to be uninlined and split
@@ -1084,7 +1084,7 @@ code = '''
lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_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;
// create 2 large entries that needs to be uninlined and split
@@ -1206,7 +1206,7 @@ code = '''
lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_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];
for (lfs3_size_t i = 0; i < N; i++) {
@@ -1343,7 +1343,7 @@ code = '''
lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_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;
// create a 2 large rattrs that needs to be uninlined
@@ -1469,7 +1469,7 @@ code = '''
lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_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;
// create 2 large entries that needs to be uninlined and split
@@ -1609,7 +1609,7 @@ code = '''
lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_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;
// create 2 large entries that needs to be uninlined and split
@@ -1749,7 +1749,7 @@ code = '''
lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_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;
// prepare mroot with an entry
@@ -1832,7 +1832,7 @@ code = '''
lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_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;
// prepare mroot with an entry
@@ -1970,7 +1970,7 @@ code = '''
lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_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;
// prepare mroot with an entry
@@ -2081,7 +2081,7 @@ code = '''
lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_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;
// create 2 large entries that needs to be uninlined and split
@@ -2226,7 +2226,7 @@ code = '''
lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_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;
// create 2 large entries that needs to be uninlined and split
@@ -2388,7 +2388,7 @@ code = '''
lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_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;
// create 2 large entries that needs to be uninlined and split
@@ -2495,7 +2495,7 @@ code = '''
lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_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
// trigger a relocation
@@ -2588,7 +2588,7 @@ code = '''
lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_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
// trigger a relocation
@@ -2695,7 +2695,7 @@ code = '''
lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_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];
for (lfs3_size_t i = 0; i < N; i++) {
@@ -2857,7 +2857,7 @@ code = '''
lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_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
lfs3_handle_t left = {.flags=0};
@@ -2917,7 +2917,7 @@ code = '''
lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_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
lfs3_handle_t left = {.flags=0};
@@ -2967,7 +2967,7 @@ code = '''
lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_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
lfs3_handle_t left = {.flags=0};
@@ -3019,7 +3019,7 @@ code = '''
lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_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
lfs3_handle_t left = {.flags=0};
@@ -3096,7 +3096,7 @@ code = '''
lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_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
lfs3_handle_t left = {.flags=0};
@@ -3187,7 +3187,7 @@ code = '''
lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_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
lfs3_handle_t left = {.flags=0};
@@ -3245,7 +3245,7 @@ code = '''
lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_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
lfs3_handle_t left = {.flags=0};
@@ -3342,7 +3342,7 @@ code = '''
lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_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
lfs3_handle_t left = {.flags=0};
@@ -3437,7 +3437,7 @@ code = '''
lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_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
lfs3_handle_t left = {.flags=0};
@@ -3547,7 +3547,7 @@ code = '''
lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_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
lfs3_handle_t left = {.flags=0};
@@ -3651,7 +3651,7 @@ code = '''
lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_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
lfs3_mdir_t mdir;
@@ -3757,7 +3757,7 @@ code = '''
lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_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;
// create a 2 large rattrs that needs to be uninlined
@@ -3897,7 +3897,7 @@ code = '''
lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_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;
// create 2 large entries that needs to be uninlined and split
@@ -4049,7 +4049,7 @@ code = '''
lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_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;
// create 2 large entries that needs to be uninlined and split
@@ -4234,7 +4234,7 @@ code = '''
lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_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
lfs3_mdir_t mdir;
@@ -4353,7 +4353,7 @@ code = '''
lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_FLAGS, CFG) => 0;
lfs3_mount(&lfs3, LFS3_M_RDWR | M_FLAGS, CFG) => 0;
lfs3_alloc_ckpoint(&lfs3, NULL);
lfs3_alloc_ckpoint(&lfs3);
// create entries
for (lfs3_size_t i = 0; i < N; i++) {
@@ -4505,7 +4505,7 @@ code = '''
lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_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];
for (lfs3_size_t i = 0; i < N; i++) {
@@ -4678,7 +4678,7 @@ code = '''
lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_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_RATTR_MPTR(
@@ -4998,7 +4998,7 @@ code = '''
lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_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;
// prepare mroot with an entry
@@ -5058,7 +5058,7 @@ code = '''
lfs3_t lfs3;
lfs3_format(&lfs3, LFS3_F_RDWR | F_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;
// prepare mroot with an entry