bmap: The initial bmapcache algorithm seems to be working
At least at a proof-of-concept level, there's still a lot of cleanup
needed.
To make things work, lfs3_alloc_ckpoint now takes an mdir, which
provides the target for gbmap gstate updates.
When the bmap is close to empty (configurable via bmap_scan_thresh), we
opportunistically rebuild it during lfs3_alloc_ckpoints. The nice thing
about lfs3_alloc_ckpoint is we know the state of all in-flight blocks,
so rebuilding the bmap just requires traversing the filesystem + in-RAM
state.
We might still fall back to the lookahead buffer, but in theory a well
tuned bmap_scan_thresh can prevent this from becoming a bottleneck (at
the cost of more frequent bmap rebuilds).
---
This is also probably a good time to resume measuring code/ram costs,
though it's worth repeating the above note about the bmap work still
needing cleanup:
code stack ctx
before: 36840 2368 684
after: 36920 (+0.2%) 2368 (+0.0%) 684 (+0.0%)
Haha, no, the bmap isn't basically free, it's just an opt-in features.
With -DLFS3_YES_BMAP=1:
code stack ctx
no bmap: 36920 2368 684
yes bmap: 38552 (+4.4%) 2472 (+4.4%) 812 (+18.7%)
This commit is contained in:
@@ -9,6 +9,9 @@
|
||||
#
|
||||
after = ['test_mtree', 'test_bmap', 'test_dirs', 'test_files']
|
||||
|
||||
# TODO bmap workaround?
|
||||
ifndef = 'LFS3_BMAP'
|
||||
|
||||
# test that we can alloc
|
||||
[cases.test_alloc_alloc]
|
||||
defines.COUNT = [
|
||||
@@ -30,7 +33,7 @@ code = '''
|
||||
lfs3_mount(&lfs3, LFS3_M_RDWR, &cfg) => 0;
|
||||
|
||||
// start allocating
|
||||
lfs3_alloc_ckpoint(&lfs3);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
lfs3_size_t alloced = 0;
|
||||
while (true) {
|
||||
lfs3_sblock_t block = lfs3_alloc(&lfs3, ERASE);
|
||||
@@ -74,7 +77,7 @@ code = '''
|
||||
lfs3_mount(&lfs3, LFS3_M_RDWR, &cfg) => 0;
|
||||
|
||||
// start allocating
|
||||
lfs3_alloc_ckpoint(&lfs3);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
lfs3_size_t alloced = 0;
|
||||
while (true) {
|
||||
lfs3_sblock_t block = lfs3_alloc(&lfs3, ERASE);
|
||||
@@ -95,7 +98,7 @@ code = '''
|
||||
assert(alloced == COUNT-2);
|
||||
|
||||
// ack again, effectively releasing all the previously alloced blocks
|
||||
lfs3_alloc_ckpoint(&lfs3);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
alloced = 0;
|
||||
while (true) {
|
||||
lfs3_sblock_t block = lfs3_alloc(&lfs3, ERASE);
|
||||
|
||||
@@ -11,6 +11,9 @@ after = [
|
||||
'test_compat',
|
||||
]
|
||||
|
||||
# TODO bmap workaround?
|
||||
ifndef = 'LFS3_BMAP'
|
||||
|
||||
|
||||
## Single-block badblock tests
|
||||
#
|
||||
@@ -58,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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
// create a btree
|
||||
lfs3_btree_t btree;
|
||||
@@ -2013,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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
// create a btree
|
||||
lfs3_btree_t btree;
|
||||
@@ -3970,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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
// create a btree
|
||||
lfs3_btree_t btree;
|
||||
|
||||
@@ -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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
// 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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
// 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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
// 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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
// 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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
// 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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
// create an initial bmap
|
||||
lfs3_btree_t bmap;
|
||||
|
||||
+53
-50
@@ -1,6 +1,9 @@
|
||||
# Test the mid-level B-trees
|
||||
after = 'test_rbyd'
|
||||
|
||||
# TODO bmap workaround?
|
||||
ifndef = 'LFS3_BMAP'
|
||||
|
||||
# maximize lookahead buffer, we don't actually gc so we only get one pass
|
||||
# of the disk for these tests
|
||||
defines.LOOKAHEAD_SIZE = '(BLOCK_COUNT+8-1) / 8'
|
||||
@@ -17,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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
// create an empty tree
|
||||
lfs3_btree_t btree;
|
||||
@@ -49,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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
// create a single-entry tree
|
||||
lfs3_btree_t btree;
|
||||
@@ -93,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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
// create a two-entry tree
|
||||
lfs3_btree_t btree;
|
||||
@@ -144,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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
// create a two-entry tree
|
||||
lfs3_btree_t btree;
|
||||
@@ -196,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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
// create a two-entry tree
|
||||
lfs3_btree_t btree;
|
||||
@@ -256,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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
// create a two-entry tree
|
||||
lfs3_btree_t btree;
|
||||
@@ -319,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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
// create a tree with N elements
|
||||
lfs3_btree_t btree;
|
||||
@@ -371,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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
// create a tree with N elements
|
||||
lfs3_btree_t btree;
|
||||
@@ -425,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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
// create a btree
|
||||
lfs3_btree_t btree;
|
||||
@@ -509,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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
// create a tree with N elements
|
||||
lfs3_btree_t btree;
|
||||
@@ -579,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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
// create a btree
|
||||
lfs3_btree_t btree;
|
||||
@@ -717,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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
// create a single-entry tree
|
||||
lfs3_btree_t btree;
|
||||
@@ -764,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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
// create a two-entry tree
|
||||
lfs3_btree_t btree;
|
||||
@@ -824,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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
// create a two-entry tree
|
||||
lfs3_btree_t btree;
|
||||
@@ -898,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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
// create a tree with N elements
|
||||
lfs3_btree_t btree;
|
||||
@@ -957,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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
// create a btree
|
||||
lfs3_btree_t btree;
|
||||
@@ -1045,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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
// create a tree with N elements
|
||||
lfs3_btree_t btree;
|
||||
@@ -1120,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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
// create a btree
|
||||
lfs3_btree_t btree;
|
||||
@@ -1265,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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
// create a single-entry tree
|
||||
lfs3_btree_t btree;
|
||||
@@ -1323,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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
// create a single-entry tree
|
||||
lfs3_btree_t btree;
|
||||
@@ -1397,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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
// create a single-entry tree
|
||||
lfs3_btree_t btree;
|
||||
@@ -1471,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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
// create a single-entry tree
|
||||
lfs3_btree_t btree;
|
||||
@@ -1564,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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
// create a tree with N elements
|
||||
lfs3_btree_t btree;
|
||||
@@ -1645,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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
// create a tree with N elements
|
||||
lfs3_btree_t btree;
|
||||
@@ -1729,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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
// create a btree
|
||||
lfs3_btree_t btree;
|
||||
@@ -1819,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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
// create a tree with N elements
|
||||
lfs3_btree_t btree;
|
||||
@@ -1927,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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
// create a btree
|
||||
lfs3_btree_t btree;
|
||||
@@ -2079,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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
// create a tree with N elements
|
||||
lfs3_btree_t btree;
|
||||
@@ -2140,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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
// create a btree
|
||||
lfs3_btree_t btree;
|
||||
@@ -2231,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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
// create a tree with N elements
|
||||
lfs3_btree_t btree;
|
||||
@@ -2293,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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
// create a btree
|
||||
lfs3_btree_t btree;
|
||||
@@ -2473,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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
// create a tree
|
||||
lfs3_btree_t btree;
|
||||
@@ -2544,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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
// create a tree
|
||||
lfs3_btree_t btree;
|
||||
@@ -2618,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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
// create a tree
|
||||
lfs3_btree_t btree;
|
||||
@@ -2685,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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
// create a tree
|
||||
lfs3_btree_t btree;
|
||||
@@ -2769,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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
// create a btree
|
||||
lfs3_btree_t btree;
|
||||
@@ -2877,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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
// create a btree
|
||||
lfs3_btree_t btree;
|
||||
@@ -3044,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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
// create a zero-entry tree
|
||||
lfs3_btree_t btree;
|
||||
@@ -3076,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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
// create a single-entry tree
|
||||
lfs3_btree_t btree;
|
||||
@@ -3135,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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
// create a two-entry tree
|
||||
lfs3_btree_t btree;
|
||||
@@ -3211,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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
// create a two-entry tree
|
||||
lfs3_btree_t btree;
|
||||
@@ -3304,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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
// create a two-entry tree
|
||||
lfs3_btree_t btree;
|
||||
@@ -3398,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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
// create a tree with N elements
|
||||
lfs3_btree_t btree;
|
||||
@@ -3475,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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
// create a btree
|
||||
lfs3_btree_t btree;
|
||||
@@ -3593,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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
// create a tree with N elements
|
||||
lfs3_btree_t btree;
|
||||
@@ -3671,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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
// create a btree
|
||||
lfs3_btree_t btree;
|
||||
@@ -3830,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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
// create a btree
|
||||
lfs3_btree_t btree;
|
||||
@@ -4010,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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
// create a btree
|
||||
lfs3_btree_t btree;
|
||||
@@ -4238,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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
// create a tree with N elements
|
||||
lfs3_btree_t btree;
|
||||
@@ -4366,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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
// create a btree
|
||||
lfs3_btree_t btree;
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
# Test checksum validation things
|
||||
after = ['test_trvs', 'test_gc', 'test_mount']
|
||||
|
||||
# TODO bmap workaround?
|
||||
ifndef = 'LFS3_BMAP'
|
||||
|
||||
|
||||
code = '''
|
||||
// naive crc32c
|
||||
|
||||
@@ -4,6 +4,9 @@
|
||||
# are needed to validate the directory tree works
|
||||
after = 'test_dirs'
|
||||
|
||||
# TODO bmap workaround?
|
||||
ifndef = 'LFS3_BMAP'
|
||||
|
||||
|
||||
# test some dir functions
|
||||
|
||||
|
||||
@@ -1226,7 +1226,7 @@ code = '''
|
||||
lfs3_file_sync(&lfs3, &file) => 0;
|
||||
|
||||
// create an empty btree
|
||||
lfs3_alloc_ckpoint(&lfs3);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
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;
|
||||
|
||||
@@ -4,6 +4,9 @@
|
||||
# GC-API specific things here
|
||||
after = ['test_trvs']
|
||||
|
||||
# TODO bmap workaround?
|
||||
ifndef = 'LFS3_BMAP'
|
||||
|
||||
# test that lookahead can make progress in isolation
|
||||
[cases.test_gc_lookahead_progress]
|
||||
defines.CKMETA = [false, true]
|
||||
|
||||
@@ -8,6 +8,9 @@ after = [
|
||||
'test_mount',
|
||||
]
|
||||
|
||||
# TODO bmap workaround?
|
||||
ifndef = 'LFS3_BMAP'
|
||||
|
||||
|
||||
# test we can mount a filesystem with fewer blocks
|
||||
[cases.test_grow_mount_smaller]
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
# Advanced mount tests
|
||||
after = ['test_mtree', 'test_trvs']
|
||||
|
||||
# TODO bmap workaround?
|
||||
ifndef = 'LFS3_BMAP'
|
||||
|
||||
|
||||
# test we can mount
|
||||
[cases.test_mount_simple]
|
||||
|
||||
+46
-46
@@ -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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
// 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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
// 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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
// 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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
// 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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
// 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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
// 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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
// 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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
// 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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
// 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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
// 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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
// 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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
// 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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
// 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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
// 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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
// 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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
// 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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
|
||||
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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
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);
|
||||
lfs3_alloc_ckpoint(&lfs3, NULL);
|
||||
lfs3_data_t data;
|
||||
|
||||
// prepare mroot with an entry
|
||||
|
||||
@@ -7,6 +7,9 @@ after = [
|
||||
'test_powerloss',
|
||||
]
|
||||
|
||||
# TODO bmap workaround?
|
||||
ifndef = 'LFS3_BMAP'
|
||||
|
||||
# Note that most of the delicate relocation operations are already tested
|
||||
# in test_mtree. This mostly just covers high-level operations with
|
||||
# relatively aggressive wear-leveling.
|
||||
|
||||
@@ -7,6 +7,9 @@ after = [
|
||||
'test_alloc'
|
||||
]
|
||||
|
||||
# TODO bmap workaround?
|
||||
ifndef = 'LFS3_BMAP'
|
||||
|
||||
# a simple traversal test
|
||||
[cases.test_trvs_simple]
|
||||
defines.MKCONSISTENT = [false, true]
|
||||
|
||||
Reference in New Issue
Block a user