Reverted attempted per-btree leaf caches

See the relevant commit for why. These just added surprisingly little
performance benefit for the code/stack cost.

Maybe in a future performance-preferring littlefs driver.
This commit is contained in:
Christopher Haster
2025-05-24 18:49:38 -05:00
parent a49e13b992
commit a1c90d2624
7 changed files with 726 additions and 782 deletions
+285 -358
View File
File diff suppressed because it is too large Load Diff
+3 -10
View File
@@ -681,15 +681,8 @@ typedef struct lfsr_rbyd {
uint32_t cksum;
} lfsr_rbyd_t;
// all we need for btrees is the root rbyd, but tracking the most recent
// leaf helps speed up iteration/attr lookup/etc
typedef struct lfsr_btree {
lfsr_rbyd_t root;
struct {
lfsr_bid_t bid;
lfsr_rbyd_t rbyd;
} leaf;
} lfsr_btree_t;
// a btree is represented by the root rbyd
typedef lfsr_rbyd_t lfsr_btree_t;
// littlefs's atomic metadata log type
typedef struct lfsr_mdir {
@@ -716,7 +709,7 @@ typedef struct lfsr_bshrub {
// trunk=0 => no bshrub/btree
// sign(trunk)=1 => bshrub
// sign(trunk)=0 => btree
lfsr_btree_t shrub;
lfsr_shrub_t shrub;
lfsr_shrub_t shrub_;
} lfsr_bshrub_t;
+12 -12
View File
@@ -98,10 +98,10 @@ code = '''
}
printf("]\n");
printf("btree: w%d 0x%x.%x\n",
lfsr_btree_weight(&btree),
lfsr_btree_block(&btree),
lfsr_btree_trunk(&btree));
assert(lfsr_btree_weight(&btree) == sim_size);
btree.weight,
btree.blocks[0],
btree.trunk);
assert(btree.weight == sim_size);
uint8_t buffer[4];
lfsr_bid_t bid_;
@@ -2053,10 +2053,10 @@ code = '''
}
printf("]\n");
printf("btree: w%d 0x%x.%x\n",
lfsr_btree_weight(&btree),
lfsr_btree_block(&btree),
lfsr_btree_trunk(&btree));
assert(lfsr_btree_weight(&btree) == sim_size);
btree.weight,
btree.blocks[0],
btree.trunk);
assert(btree.weight == sim_size);
uint8_t buffer[4];
lfsr_bid_t bid_;
@@ -4010,10 +4010,10 @@ code = '''
}
printf("]\n");
printf("btree: w%d 0x%x.%x\n",
lfsr_btree_weight(&btree),
lfsr_btree_block(&btree),
lfsr_btree_trunk(&btree));
assert(lfsr_btree_weight(&btree) == sim_size);
btree.weight,
btree.blocks[0],
btree.trunk);
assert(btree.weight == sim_size);
uint8_t buffer[4];
lfsr_bid_t bid_;
+317 -293
View File
File diff suppressed because it is too large Load Diff
+3 -3
View File
@@ -1227,10 +1227,10 @@ code = '''
// create an empty btree
lfs_alloc_ckpoint(&lfs);
lfsr_rbyd_alloc(&lfs, &file.b.shrub.root) => 0;
lfsr_rbyd_commit(&lfs, &file.b.shrub.root, 0, LFSR_RATTRS(
lfsr_rbyd_alloc(&lfs, &file.b.shrub) => 0;
lfsr_rbyd_commit(&lfs, &file.b.shrub, 0, LFSR_RATTRS(
LFSR_RATTR_BUF(LFSR_TAG_DATA, +1, "?", 1))) => 0;
lfsr_rbyd_commit(&lfs, &file.b.shrub.root, 0, LFSR_RATTRS(
lfsr_rbyd_commit(&lfs, &file.b.shrub, 0, LFSR_RATTRS(
LFSR_RATTR(LFSR_TAG_RM, -1))) => 0;
lfsr_mdir_commit(&lfs, &file.b.o.mdir, LFSR_RATTRS(
LFSR_RATTR_BTREE(
+61 -61
View File
@@ -196,7 +196,7 @@ code = '''
LFSR_RATTR_BUF(LFSR_TAG_ATTR(3), 0, "c", 1))) => 0;
// assert mdirs were unininlined
assert(lfs.mtree.root.weight == (1 << lfs.mbits));
assert(lfs.mtree.weight == (1 << lfs.mbits));
// assert mroot now has no entries
assert(lfs.mroot.rbyd.weight == 0);
@@ -220,7 +220,7 @@ code = '''
lfsr_mount(&lfs, LFS_M_RDWR | M_FLAGS, CFG) => 0;
// assert mdirs were unininlined
assert(lfs.mtree.root.weight == (1 << lfs.mbits));
assert(lfs.mtree.weight == (1 << lfs.mbits));
// assert mroot now has no entries
assert(lfs.mroot.rbyd.weight == 0);
@@ -281,7 +281,7 @@ code = '''
LFSR_RATTR_BUF(LFSR_TAG_ATTR(1), 0, "c", 1))) => 0;
// assert mdirs were unininlined and split
assert(lfs.mtree.root.weight == (2 << lfs.mbits));
assert(lfs.mtree.weight == (2 << lfs.mbits));
// assert mroot now has no entries
assert(lfs.mroot.rbyd.weight == 0);
@@ -307,7 +307,7 @@ code = '''
lfsr_mount(&lfs, LFS_M_RDWR | M_FLAGS, CFG) => 0;
// assert mdirs were unininlined and split
assert(lfs.mtree.root.weight == (2 << lfs.mbits));
assert(lfs.mtree.weight == (2 << lfs.mbits));
// assert mroot now has no entries
assert(lfs.mroot.rbyd.weight == 0);
@@ -370,7 +370,7 @@ code = '''
LFSR_RATTR_BUF(LFSR_TAG_ATTR(1), 0, "c", 1))) => 0;
// assert mdirs were unininlined and split
assert(lfs.mtree.root.weight == (2 << lfs.mbits));
assert(lfs.mtree.weight == (2 << lfs.mbits));
// assert mroot now has no entries
assert(lfs.mroot.rbyd.weight == 0);
@@ -390,7 +390,7 @@ code = '''
LFSR_RATTR_BUF(LFSR_TAG_ATTR(2), 0, "e", 1))) => 0;
// assert mdir was split correctly
assert(lfs.mtree.root.weight == (3 << lfs.mbits));
assert(lfs.mtree.weight == (3 << lfs.mbits));
// assert mroot still has no entries
assert(lfs.mroot.rbyd.weight == 0);
@@ -426,7 +426,7 @@ code = '''
lfsr_mount(&lfs, LFS_M_RDWR | M_FLAGS, CFG) => 0;
// assert mdir was split correctly
assert(lfs.mtree.root.weight == (3 << lfs.mbits));
assert(lfs.mtree.weight == (3 << lfs.mbits));
// assert mroot still has no entries
assert(lfs.mroot.rbyd.weight == 0);
@@ -687,7 +687,7 @@ code = '''
LFSR_RATTR_BUF(LFSR_TAG_ATTR(1), 0, "c", 1))) => 0;
// assert mdirs were unininlined and split
assert(lfs.mtree.root.weight == (2 << lfs.mbits));
assert(lfs.mtree.weight == (2 << lfs.mbits));
// assert mroot now has no entries
assert(lfs.mroot.rbyd.weight == 0);
@@ -700,7 +700,7 @@ code = '''
assert(mdir.rbyd.weight == 0);
// assert mdir was dropped
assert(lfs.mtree.root.weight == (1 << lfs.mbits));
assert(lfs.mtree.weight == (1 << lfs.mbits));
// assert mroot still has no entries
assert(lfs.mroot.rbyd.weight == 0);
@@ -720,7 +720,7 @@ code = '''
lfsr_mount(&lfs, LFS_M_RDWR | M_FLAGS, CFG) => 0;
// assert mdir was dropped
assert(lfs.mtree.root.weight == (1 << lfs.mbits));
assert(lfs.mtree.weight == (1 << lfs.mbits));
// assert mroot still has no entries
assert(lfs.mroot.rbyd.weight == 0);
@@ -777,7 +777,7 @@ code = '''
LFSR_RATTR_BUF(LFSR_TAG_ATTR(1), 0, "c", 1))) => 0;
// assert mdirs were unininlined and split
assert(lfs.mtree.root.weight == (2 << lfs.mbits));
assert(lfs.mtree.weight == (2 << lfs.mbits));
// assert mroot now has no entries
assert(lfs.mroot.rbyd.weight == 0);
@@ -792,7 +792,7 @@ code = '''
assert(mdir.rbyd.weight == 0);
// assert mdir was dropped
assert(lfs.mtree.root.weight == (1 << lfs.mbits));
assert(lfs.mtree.weight == (1 << lfs.mbits));
// assert mroot still has no entries
assert(lfs.mroot.rbyd.weight == 0);
@@ -812,7 +812,7 @@ code = '''
lfsr_mount(&lfs, LFS_M_RDWR | M_FLAGS, CFG) => 0;
// assert mdir was dropped
assert(lfs.mtree.root.weight == (1 << lfs.mbits));
assert(lfs.mtree.weight == (1 << lfs.mbits));
// assert mroot still has no entries
assert(lfs.mroot.rbyd.weight == 0);
@@ -875,7 +875,7 @@ code = '''
assert(mdir.rbyd.weight == 2);
// assert split/drop worked out
assert(lfs.mtree.root.weight == (1 << lfs.mbits));
assert(lfs.mtree.weight == (1 << lfs.mbits));
// assert mroot still has no entries
assert(lfs.mroot.rbyd.weight == 0);
@@ -891,7 +891,7 @@ code = '''
lfsr_mount(&lfs, LFS_M_RDWR | M_FLAGS, CFG) => 0;
// assert mdir was dropped
assert(lfs.mtree.root.weight == (1 << lfs.mbits));
assert(lfs.mtree.weight == (1 << lfs.mbits));
// assert mroot still has no entries
assert(lfs.mroot.rbyd.weight == 0);
@@ -944,7 +944,7 @@ code = '''
LFSR_RATTR_BUF(LFSR_TAG_ATTR(1), 0, "c", 1))) => 0;
// assert mdirs were unininlined and split
assert(lfs.mtree.root.weight == (2 << lfs.mbits));
assert(lfs.mtree.weight == (2 << lfs.mbits));
// assert mroot now has no entries
assert(lfs.mroot.rbyd.weight == 0);
@@ -969,7 +969,7 @@ code = '''
assert(mdir.rbyd.weight == 1);
// assert split/drop worked out
assert(lfs.mtree.root.weight == (2 << lfs.mbits));
assert(lfs.mtree.weight == (2 << lfs.mbits));
// assert mroot still has no entries
assert(lfs.mroot.rbyd.weight == 0);
@@ -995,7 +995,7 @@ code = '''
lfsr_mount(&lfs, LFS_M_RDWR | M_FLAGS, CFG) => 0;
// assert split/drop worked out
assert(lfs.mtree.root.weight == (2 << lfs.mbits));
assert(lfs.mtree.weight == (2 << lfs.mbits));
// assert mroot still has no entries
assert(lfs.mroot.rbyd.weight == 0);
@@ -1058,7 +1058,7 @@ code = '''
LFSR_RATTR_BUF(LFSR_TAG_ATTR(1), 0, "c", 1))) => 0;
// assert mdirs were unininlined and split
assert(lfs.mtree.root.weight == (2 << lfs.mbits));
assert(lfs.mtree.weight == (2 << lfs.mbits));
// assert mroot now has no entries
assert(lfs.mroot.rbyd.weight == 0);
@@ -1083,7 +1083,7 @@ code = '''
assert(mdir.rbyd.weight == 1);
// assert split/drop worked out
assert(lfs.mtree.root.weight == (2 << lfs.mbits));
assert(lfs.mtree.weight == (2 << lfs.mbits));
// assert mroot still has no entries
assert(lfs.mroot.rbyd.weight == 0);
@@ -1109,7 +1109,7 @@ code = '''
lfsr_mount(&lfs, LFS_M_RDWR | M_FLAGS, CFG) => 0;
// assert split/drop worked out
assert(lfs.mtree.root.weight == (2 << lfs.mbits));
assert(lfs.mtree.weight == (2 << lfs.mbits));
// assert mroot still has no entries
assert(lfs.mroot.rbyd.weight == 0);
@@ -1296,7 +1296,7 @@ code = '''
LFSR_RATTR_BUF(LFSR_TAG_ATTR(3), 0, "c", 1))) => 0;
// assert mdirs were unininlined
assert(lfs.mtree.root.weight == (1 << lfs.mbits));
assert(lfs.mtree.weight == (1 << lfs.mbits));
// assert mroot now has no entries
assert(lfs.mroot.rbyd.weight == 0);
@@ -1313,7 +1313,7 @@ code = '''
assert(lfsr_mdir_cmp(&old_mdir, &mdir) != 0);
// assert mdirs were unininlined
assert(lfs.mtree.root.weight == (1 << lfs.mbits));
assert(lfs.mtree.weight == (1 << lfs.mbits));
// assert mroot now has no entries
assert(lfs.mroot.rbyd.weight == 0);
@@ -1347,7 +1347,7 @@ code = '''
lfsr_mount(&lfs, LFS_M_RDWR | M_FLAGS, CFG) => 0;
// assert mdirs were unininlined
assert(lfs.mtree.root.weight == (1 << lfs.mbits));
assert(lfs.mtree.weight == (1 << lfs.mbits));
// assert mroot now has no entries
assert(lfs.mroot.rbyd.weight == 0);
@@ -1420,7 +1420,7 @@ code = '''
LFSR_RATTR_BUF(LFSR_TAG_ATTR(1), 0, "c", 1))) => 0;
// assert mdirs were unininlined and split
assert(lfs.mtree.root.weight == (2 << lfs.mbits));
assert(lfs.mtree.weight == (2 << lfs.mbits));
// assert mroot now has no entries
assert(lfs.mroot.rbyd.weight == 0);
@@ -1439,7 +1439,7 @@ code = '''
assert(lfsr_mdir_cmp(&old_mdir, &mdir) != 0);
// assert mdirs were unininlined and split
assert(lfs.mtree.root.weight == (2 << lfs.mbits));
assert(lfs.mtree.weight == (2 << lfs.mbits));
// assert mroot now has no entries
assert(lfs.mroot.rbyd.weight == 0);
@@ -1475,7 +1475,7 @@ code = '''
lfsr_mount(&lfs, LFS_M_RDWR | M_FLAGS, CFG) => 0;
// assert mdirs were unininlined and split
assert(lfs.mtree.root.weight == (2 << lfs.mbits));
assert(lfs.mtree.weight == (2 << lfs.mbits));
// assert mroot now has no entries
assert(lfs.mroot.rbyd.weight == 0);
@@ -1550,7 +1550,7 @@ code = '''
LFSR_RATTR_BUF(LFSR_TAG_ATTR(1), 0, "c", 1))) => 0;
// assert mdirs were unininlined and split
assert(lfs.mtree.root.weight == (2 << lfs.mbits));
assert(lfs.mtree.weight == (2 << lfs.mbits));
// assert mroot now has no entries
assert(lfs.mroot.rbyd.weight == 0);
@@ -1569,7 +1569,7 @@ code = '''
assert(lfsr_mdir_cmp(&old_mdir, &mdir) != 0);
// assert mdirs were unininlined and split
assert(lfs.mtree.root.weight == (2 << lfs.mbits));
assert(lfs.mtree.weight == (2 << lfs.mbits));
// assert mroot now has no entries
assert(lfs.mroot.rbyd.weight == 0);
@@ -1605,7 +1605,7 @@ code = '''
lfsr_mount(&lfs, LFS_M_RDWR | M_FLAGS, CFG) => 0;
// assert mdirs were unininlined and split
assert(lfs.mtree.root.weight == (2 << lfs.mbits));
assert(lfs.mtree.weight == (2 << lfs.mbits));
// assert mroot now has no entries
assert(lfs.mroot.rbyd.weight == 0);
@@ -1982,7 +1982,7 @@ code = '''
LFSR_RATTR_BUF(LFSR_TAG_ATTR(1), 0, "c", 1))) => 0;
// assert mdirs were unininlined and split
assert(lfs.mtree.root.weight == (2 << lfs.mbits));
assert(lfs.mtree.weight == (2 << lfs.mbits));
// assert mroot now has no entries
assert(lfs.mroot.rbyd.weight == 0);
@@ -2006,7 +2006,7 @@ code = '''
assert(lfsr_mdir_cmp(&old_mroot, &lfs.mroot) != 0);
// assert mdirs were unininlined and split
assert(lfs.mtree.root.weight == (2 << lfs.mbits));
assert(lfs.mtree.weight == (2 << lfs.mbits));
// assert mroot now has no entries
assert(lfs.mroot.rbyd.weight == 0);
@@ -2042,7 +2042,7 @@ code = '''
lfsr_mount(&lfs, LFS_M_RDWR | M_FLAGS, CFG) => 0;
// assert mdirs were unininlined and split
assert(lfs.mtree.root.weight == (2 << lfs.mbits));
assert(lfs.mtree.weight == (2 << lfs.mbits));
// assert mroot now has no entries
assert(lfs.mroot.rbyd.weight == 0);
@@ -2117,7 +2117,7 @@ code = '''
LFSR_RATTR_BUF(LFSR_TAG_ATTR(1), 0, "c", 1))) => 0;
// assert mdirs were unininlined and split
assert(lfs.mtree.root.weight == (2 << lfs.mbits));
assert(lfs.mtree.weight == (2 << lfs.mbits));
// assert mroot now has no entries
assert(lfs.mroot.rbyd.weight == 0);
@@ -2148,7 +2148,7 @@ code = '''
assert(lfsr_mdir_cmp(&old_mroot, &lfs.mroot) != 0);
// assert mdir was split correctly
assert(lfs.mtree.root.weight == (3 << lfs.mbits));
assert(lfs.mtree.weight == (3 << lfs.mbits));
// assert mroot still has no entries
assert(lfs.mroot.rbyd.weight == 0);
@@ -2188,7 +2188,7 @@ code = '''
lfsr_mount(&lfs, LFS_M_RDWR | M_FLAGS, CFG) => 0;
// assert mdir was split correctly
assert(lfs.mtree.root.weight == (3 << lfs.mbits));
assert(lfs.mtree.weight == (3 << lfs.mbits));
// assert mroot still has no entries
assert(lfs.mroot.rbyd.weight == 0);
@@ -2267,7 +2267,7 @@ code = '''
LFSR_RATTR_BUF(LFSR_TAG_ATTR(1), 0, "c", 1))) => 0;
// assert mdirs were unininlined and split
assert(lfs.mtree.root.weight == (2 << lfs.mbits));
assert(lfs.mtree.weight == (2 << lfs.mbits));
// assert mroot now has no entries
assert(lfs.mroot.rbyd.weight == 0);
@@ -2291,7 +2291,7 @@ code = '''
assert(lfsr_mdir_cmp(&old_mroot, &lfs.mroot) != 0);
// assert mdir was dropped
assert(lfs.mtree.root.weight == (1 << lfs.mbits));
assert(lfs.mtree.weight == (1 << lfs.mbits));
// assert mroot still has no entries
assert(lfs.mroot.rbyd.weight == 0);
@@ -2311,7 +2311,7 @@ code = '''
lfsr_mount(&lfs, LFS_M_RDWR | M_FLAGS, CFG) => 0;
// assert mdir was dropped
assert(lfs.mtree.root.weight == (1 << lfs.mbits));
assert(lfs.mtree.weight == (1 << lfs.mbits));
// assert mroot still has no entries
assert(lfs.mroot.rbyd.weight == 0);
@@ -2368,7 +2368,7 @@ code = '''
assert(lfsr_mdir_cmp(&old_mroot, &lfs.mroot) != 0);
// assert mdirs were unininlined
assert(lfs.mtree.root.weight == (1 << lfs.mbits));
assert(lfs.mtree.weight == (1 << lfs.mbits));
// assert mroot now has no entries
assert(lfs.mroot.rbyd.weight == 0);
@@ -2392,7 +2392,7 @@ code = '''
lfsr_mount(&lfs, LFS_M_RDWR | M_FLAGS, CFG) => 0;
// assert mdirs were unininlined
assert(lfs.mtree.root.weight == (1 << lfs.mbits));
assert(lfs.mtree.weight == (1 << lfs.mbits));
// assert mroot now has no entries
assert(lfs.mroot.rbyd.weight == 0);
@@ -2463,7 +2463,7 @@ code = '''
assert(lfsr_mdir_cmp(&old_mroot, &lfs.mroot) != 0);
// assert mdirs were unininlined and split
assert(lfs.mtree.root.weight == (2 << lfs.mbits));
assert(lfs.mtree.weight == (2 << lfs.mbits));
// assert mroot now has no entries
assert(lfs.mroot.rbyd.weight == 0);
@@ -2489,7 +2489,7 @@ code = '''
lfsr_mount(&lfs, LFS_M_RDWR | M_FLAGS, CFG) => 0;
// assert mdirs were unininlined and split
assert(lfs.mtree.root.weight == (2 << lfs.mbits));
assert(lfs.mtree.weight == (2 << lfs.mbits));
// assert mroot now has no entries
assert(lfs.mroot.rbyd.weight == 0);
@@ -2888,7 +2888,7 @@ code = '''
lfsr_mdir_commit(&lfs, &lfs.mroot, NULL, 0) => 0;
// assert mdirs were unininlined and split
assert(lfs.mtree.root.weight == (2 << lfs.mbits));
assert(lfs.mtree.weight == (2 << lfs.mbits));
// assert mroot now has no entries
assert(lfs.mroot.rbyd.weight == 0);
@@ -2979,7 +2979,7 @@ code = '''
lfsr_mdir_commit(&lfs, &mdir, NULL, 0) => 0;
// assert mdir was split correctly
assert(lfs.mtree.root.weight == (3 << lfs.mbits));
assert(lfs.mtree.weight == (3 << lfs.mbits));
// assert mroot still has no entries
assert(lfs.mroot.rbyd.weight == 0);
@@ -3114,7 +3114,7 @@ code = '''
lfsr_mdir_commit(&lfs, &lfs.mroot, NULL, 0) => 0;
// assert mdirs were unininlined and split
assert(lfs.mtree.root.weight == (2 << lfs.mbits));
assert(lfs.mtree.weight == (2 << lfs.mbits));
// assert mroot now has no entries
assert(lfs.mroot.rbyd.weight == 0);
@@ -3211,7 +3211,7 @@ code = '''
lfsr_mdir_commit(&lfs, &lfs.mroot, NULL, 0) => 0;
// assert mdirs were unininlined and split
assert(lfs.mtree.root.weight == (2 << lfs.mbits));
assert(lfs.mtree.weight == (2 << lfs.mbits));
// assert mroot now has no entries
assert(lfs.mroot.rbyd.weight == 0);
@@ -3320,7 +3320,7 @@ code = '''
lfsr_mdir_commit(&lfs, &mdir, NULL, 0) => 0;
// assert mdir was split correctly
assert(lfs.mtree.root.weight == (3 << lfs.mbits));
assert(lfs.mtree.weight == (3 << lfs.mbits));
// assert mroot still has no entries
assert(lfs.mroot.rbyd.weight == 0);
@@ -3339,7 +3339,7 @@ code = '''
lfsr_mdir_commit(&lfs, &mdir, NULL, 0) => 0;
// assert mdir was split correctly
assert(lfs.mtree.root.weight == (4 << lfs.mbits));
assert(lfs.mtree.weight == (4 << lfs.mbits));
// assert mroot still has no entries
assert(lfs.mroot.rbyd.weight == 0);
@@ -3430,7 +3430,7 @@ code = '''
lfsr_mdir_commit(&lfs, &mdir, NULL, 0) => 0;
// assert mdir was split correctly
assert(lfs.mtree.root.weight == (3 << lfs.mbits));
assert(lfs.mtree.weight == (3 << lfs.mbits));
// assert mroot still has no entries
assert(lfs.mroot.rbyd.weight == 0);
@@ -3440,7 +3440,7 @@ code = '''
assert(mdir.rbyd.weight == 0);
// assert mdir was dropped correctly
assert(lfs.mtree.root.weight == (2 << lfs.mbits));
assert(lfs.mtree.weight == (2 << lfs.mbits));
// assert mroot still has no entries
assert(lfs.mroot.rbyd.weight == 0);
@@ -3597,7 +3597,7 @@ code = '''
lfsr_mdir_commit(&lfs, &lfs.mroot, NULL, 0) => 0;
// assert mdirs were unininlined
assert(lfs.mtree.root.weight == (1 << lfs.mbits));
assert(lfs.mtree.weight == (1 << lfs.mbits));
// assert mroot now has no entries
assert(lfs.mroot.rbyd.weight == 0);
@@ -3663,7 +3663,7 @@ code = '''
// and the tree should still work
// assert mdirs were unininlined
assert(lfs.mtree.root.weight == (1 << lfs.mbits));
assert(lfs.mtree.weight == (1 << lfs.mbits));
// assert mroot now has no entries
assert(lfs.mroot.rbyd.weight == 0);
@@ -3683,7 +3683,7 @@ code = '''
lfsr_mount(&lfs, LFS_M_RDWR | M_FLAGS, CFG) => 0;
// assert mdirs were unininlined
assert(lfs.mtree.root.weight == (1 << lfs.mbits));
assert(lfs.mtree.weight == (1 << lfs.mbits));
// assert mroot now has no entries
assert(lfs.mroot.rbyd.weight == 0);
@@ -3740,7 +3740,7 @@ code = '''
lfsr_mdir_commit(&lfs, &lfs.mroot, NULL, 0) => 0;
// assert mdirs were unininlined and split
assert(lfs.mtree.root.weight == (2 << lfs.mbits));
assert(lfs.mtree.weight == (2 << lfs.mbits));
// assert mroot now has no entries
assert(lfs.mroot.rbyd.weight == 0);
@@ -3806,7 +3806,7 @@ code = '''
// and the tree should still work
// assert mdirs were unininlined and split
assert(lfs.mtree.root.weight == (2 << lfs.mbits));
assert(lfs.mtree.weight == (2 << lfs.mbits));
// assert mroot now has no entries
assert(lfs.mroot.rbyd.weight == 0);
@@ -3828,7 +3828,7 @@ code = '''
lfsr_mount(&lfs, LFS_M_RDWR | M_FLAGS, CFG) => 0;
// assert mdirs were unininlined and split
assert(lfs.mtree.root.weight == (2 << lfs.mbits));
assert(lfs.mtree.weight == (2 << lfs.mbits));
// assert mroot now has no entries
assert(lfs.mroot.rbyd.weight == 0);
@@ -3887,7 +3887,7 @@ code = '''
lfsr_mdir_commit(&lfs, &lfs.mroot, NULL, 0) => 0;
// assert mdirs were unininlined and split
assert(lfs.mtree.root.weight == (2 << lfs.mbits));
assert(lfs.mtree.weight == (2 << lfs.mbits));
// assert mroot now has no entries
assert(lfs.mroot.rbyd.weight == 0);
@@ -3906,7 +3906,7 @@ code = '''
lfsr_mdir_commit(&lfs, &mdir, NULL, 0) => 0;
// assert mdir was split correctly
assert(lfs.mtree.root.weight == (3 << lfs.mbits));
assert(lfs.mtree.weight == (3 << lfs.mbits));
// assert mroot still has no entries
assert(lfs.mroot.rbyd.weight == 0);
@@ -3972,7 +3972,7 @@ code = '''
// and the tree should still work
// assert mdir was split correctly
assert(lfs.mtree.root.weight == (3 << lfs.mbits));
assert(lfs.mtree.weight == (3 << lfs.mbits));
// assert mroot still has no entries
assert(lfs.mroot.rbyd.weight == 0);
@@ -4000,7 +4000,7 @@ code = '''
lfsr_mount(&lfs, LFS_M_RDWR | M_FLAGS, CFG) => 0;
// assert mdir was split correctly
assert(lfs.mtree.root.weight == (3 << lfs.mbits));
assert(lfs.mtree.weight == (3 << lfs.mbits));
// assert mroot still has no entries
assert(lfs.mroot.rbyd.weight == 0);
+45 -45
View File
@@ -3416,7 +3416,7 @@ code = '''
// create enough files for mroot to split
lfs_size_t i = 0;
while (lfs.mtree.root.weight == 0) {
while (lfs.mtree.weight == 0) {
char name[256];
sprintf(name, "uloborus%03x", i);
lfsr_file_open(&lfs, &file, name,
@@ -3535,7 +3535,7 @@ code = '''
// create enough files for mroot to split
lfs_size_t i = 0;
while (lfs.mtree.root.weight == 0) {
while (lfs.mtree.weight == 0) {
char name[256];
sprintf(name, "uloborus%03x", i);
lfsr_file_open(&lfs, &file, name,
@@ -3662,7 +3662,7 @@ code = '''
// create enough files for mroot to split
lfs_size_t i = 0;
while (lfs.mtree.root.weight == 0) {
while (lfs.mtree.weight == 0) {
char name[256];
sprintf(name, "uloborus%03x", i);
lfsr_file_open(&lfs, &file, name,
@@ -4186,7 +4186,7 @@ code = '''
// create enough files for mroot to split twice
lfs_size_t i = 0;
while (lfs.mtree.root.weight == 0) {
while (lfs.mtree.weight == 0) {
char name[256];
sprintf(name, "tarantula%03x", i);
lfsr_file_open(&lfs, &file, name,
@@ -4196,8 +4196,8 @@ code = '''
}
i = 0;
lfs_size_t orig = lfs.mtree.root.weight;
while (lfs.mtree.root.weight == orig) {
lfs_size_t orig = lfs.mtree.weight;
while (lfs.mtree.weight == orig) {
char name[256];
sprintf(name, "xnotata%03x", i);
lfsr_file_open(&lfs, &file, name,
@@ -4221,8 +4221,8 @@ code = '''
// create enough files for mdir to split again
i = 0;
orig = lfs.mtree.root.weight;
while (lfs.mtree.root.weight == orig) {
orig = lfs.mtree.weight;
while (lfs.mtree.weight == orig) {
char name[256];
sprintf(name, "vulsor%03x", i);
lfsr_file_open(&lfs, &file, name,
@@ -4361,7 +4361,7 @@ code = '''
// create enough files for mroot to split twice
lfs_size_t i = 0;
while (lfs.mtree.root.weight == 0) {
while (lfs.mtree.weight == 0) {
char name[256];
sprintf(name, "tarantula%03x", i);
lfsr_file_open(&lfs, &file, name,
@@ -4371,8 +4371,8 @@ code = '''
}
i = 0;
lfs_size_t orig = lfs.mtree.root.weight;
while (lfs.mtree.root.weight == orig) {
lfs_size_t orig = lfs.mtree.weight;
while (lfs.mtree.weight == orig) {
char name[256];
sprintf(name, "xnotata%03x", i);
lfsr_file_open(&lfs, &file, name,
@@ -4420,8 +4420,8 @@ code = '''
// create enough files for mdir to split again
i = 0;
orig = lfs.mtree.root.weight;
while (lfs.mtree.root.weight == orig) {
orig = lfs.mtree.weight;
while (lfs.mtree.weight == orig) {
char name[256];
sprintf(name, "vulsor%03x", i);
lfsr_file_open(&lfs, &file, name,
@@ -4543,7 +4543,7 @@ code = '''
// create enough files for mroot to split twice
lfs_size_t i = 0;
while (lfs.mtree.root.weight == 0) {
while (lfs.mtree.weight == 0) {
char name[256];
sprintf(name, "tarantula%03x", i);
lfsr_file_open(&lfs, &file, name,
@@ -4553,8 +4553,8 @@ code = '''
}
i = 0;
lfs_size_t orig = lfs.mtree.root.weight;
while (lfs.mtree.root.weight == orig) {
lfs_size_t orig = lfs.mtree.weight;
while (lfs.mtree.weight == orig) {
char name[256];
sprintf(name, "xnotata%03x", i);
lfsr_file_open(&lfs, &file, name,
@@ -4607,8 +4607,8 @@ code = '''
// create enough files for mdir to split again
i = 0;
orig = lfs.mtree.root.weight;
while (lfs.mtree.root.weight == orig) {
orig = lfs.mtree.weight;
while (lfs.mtree.weight == orig) {
char name[256];
sprintf(name, "vulsor%03x", i);
lfsr_file_open(&lfs, &file, name,
@@ -4719,7 +4719,7 @@ code = '''
// create enough files for mroot to split twice
lfs_size_t i = 0;
while (lfs.mtree.root.weight == 0) {
while (lfs.mtree.weight == 0) {
char name[256];
sprintf(name, "tarantula%03x", i);
lfsr_file_open(&lfs, &file, name,
@@ -4729,8 +4729,8 @@ code = '''
}
i = 0;
lfs_size_t orig = lfs.mtree.root.weight;
while (lfs.mtree.root.weight == orig) {
lfs_size_t orig = lfs.mtree.weight;
while (lfs.mtree.weight == orig) {
char name[256];
sprintf(name, "xnotata%03x", i);
lfsr_file_open(&lfs, &file, name,
@@ -4892,7 +4892,7 @@ code = '''
// create enough files for mroot to split twice
lfs_size_t i = 0;
while (lfs.mtree.root.weight == 0) {
while (lfs.mtree.weight == 0) {
char name[256];
sprintf(name, "tarantula%03x", i);
lfsr_file_open(&lfs, &file, name,
@@ -4902,8 +4902,8 @@ code = '''
}
i = 0;
lfs_size_t orig = lfs.mtree.root.weight;
while (lfs.mtree.root.weight == orig) {
lfs_size_t orig = lfs.mtree.weight;
while (lfs.mtree.weight == orig) {
char name[256];
sprintf(name, "xnotata%03x", i);
lfsr_file_open(&lfs, &file, name,
@@ -5083,7 +5083,7 @@ code = '''
// create enough files for mroot to split twice
lfs_size_t i = 0;
while (lfs.mtree.root.weight == 0) {
while (lfs.mtree.weight == 0) {
char name[256];
sprintf(name, "tarantula%03x", i);
lfsr_file_open(&lfs, &file, name,
@@ -5093,8 +5093,8 @@ code = '''
}
i = 0;
lfs_size_t orig = lfs.mtree.root.weight;
while (lfs.mtree.root.weight == orig) {
lfs_size_t orig = lfs.mtree.weight;
while (lfs.mtree.weight == orig) {
char name[256];
sprintf(name, "xnotata%03x", i);
lfsr_file_open(&lfs, &file, name,
@@ -5262,7 +5262,7 @@ code = '''
// create enough files for mroot to split twice
lfs_size_t i = 0;
while (lfs.mtree.root.weight == 0) {
while (lfs.mtree.weight == 0) {
char name[256];
sprintf(name, "tarantula%03x", i);
lfsr_file_open(&lfs, &file, name,
@@ -5272,8 +5272,8 @@ code = '''
}
i = 0;
lfs_size_t orig = lfs.mtree.root.weight;
while (lfs.mtree.root.weight == orig) {
lfs_size_t orig = lfs.mtree.weight;
while (lfs.mtree.weight == orig) {
char name[256];
sprintf(name, "xnotata%03x", i);
lfsr_file_open(&lfs, &file, name,
@@ -5795,7 +5795,7 @@ code = '''
lfs_size_t i = 0;
while (true) {
// we should not have split yet
assert(lfs.mtree.root.weight == 0);
assert(lfs.mtree.weight == 0);
// we need internals to check this
lfs_ssize_t estimate = lfsr_mdir_estimate__(&lfs,
&file1.b.o.mdir, -1, -1,
@@ -5964,7 +5964,7 @@ code = '''
// create enough files for mroot to split twice
lfs_size_t i = 0;
while (lfs.mtree.root.weight == 0) {
while (lfs.mtree.weight == 0) {
char name[256];
sprintf(name, "hydroid%03x", i);
lfsr_file_t file;
@@ -5975,8 +5975,8 @@ code = '''
}
i = 0;
lfs_size_t orig = lfs.mtree.root.weight;
while (lfs.mtree.root.weight == orig) {
lfs_size_t orig = lfs.mtree.weight;
while (lfs.mtree.weight == orig) {
char name[256];
sprintf(name, "medusa%03x", i);
lfsr_file_t file;
@@ -6198,7 +6198,7 @@ code = '''
// create enough files for mroot to split twice
lfs_size_t i = 0;
while (lfs.mtree.root.weight == 0) {
while (lfs.mtree.weight == 0) {
char name[256];
sprintf(name, "hydroid%03x", i);
lfsr_file_t file;
@@ -6209,8 +6209,8 @@ code = '''
}
i = 0;
lfs_size_t orig = lfs.mtree.root.weight;
while (lfs.mtree.root.weight == orig) {
lfs_size_t orig = lfs.mtree.weight;
while (lfs.mtree.weight == orig) {
char name[256];
sprintf(name, "polyp%03x", i);
lfsr_file_t file;
@@ -6222,10 +6222,10 @@ code = '''
// create enough files to both compact and split
i = 0;
orig = lfs.mtree.root.weight;
orig = lfs.mtree.weight;
while (true) {
// we should not have split yet
assert(lfs.mtree.root.weight == orig);
assert(lfs.mtree.weight == orig);
// we need internals to check this
lfs_ssize_t estimate = lfsr_mdir_estimate__(&lfs,
&file2.b.o.mdir, -1, -1,
@@ -6482,7 +6482,7 @@ code = '''
assert(!(lfs.flags & LFS_I_MKCONSISTENT));
// which means there shouldn't be that many files left
assert(lfs.mtree.root.weight <= (2 << lfs.mbits));
assert(lfs.mtree.weight <= (2 << lfs.mbits));
assert(file1.b.o.mdir.rbyd.weight <= 3);
assert(file2.b.o.mdir.rbyd.weight <= 3);
@@ -6783,7 +6783,7 @@ code = '''
assert(!(lfs.flags & LFS_I_MKCONSISTENT));
// which means there shouldn't be that many files left
assert(lfs.mtree.root.weight <= (2 << lfs.mbits));
assert(lfs.mtree.weight <= (2 << lfs.mbits));
assert(file1.b.o.mdir.rbyd.weight <= 3);
assert(file2.b.o.mdir.rbyd.weight <= 3);
@@ -6943,7 +6943,7 @@ code = '''
assert(!(lfs.flags & LFS_I_MKCONSISTENT));
// which means there shouldn't be that many files left
assert(lfs.mtree.root.weight <= (2 << lfs.mbits));
assert(lfs.mtree.weight <= (2 << lfs.mbits));
assert(file1.b.o.mdir.rbyd.weight <= 3);
assert(file2.b.o.mdir.rbyd.weight <= 3);
@@ -7112,7 +7112,7 @@ code = '''
assert(!(lfs.flags & LFS_I_MKCONSISTENT));
// which means there shouldn't be that many files left
assert(lfs.mtree.root.weight <= (2 << lfs.mbits));
assert(lfs.mtree.weight <= (2 << lfs.mbits));
assert(file1.b.o.mdir.rbyd.weight <= 3);
assert(file2.b.o.mdir.rbyd.weight <= 3);
@@ -7281,7 +7281,7 @@ code = '''
assert(!(lfs.flags & LFS_I_MKCONSISTENT));
// which means there shouldn't be that many files left
assert(lfs.mtree.root.weight <= (2 << lfs.mbits));
assert(lfs.mtree.weight <= (2 << lfs.mbits));
assert(file1.b.o.mdir.rbyd.weight <= 3);
assert(file2.b.o.mdir.rbyd.weight <= 3);
@@ -7446,7 +7446,7 @@ code = '''
assert(!(lfs.flags & LFS_I_MKCONSISTENT));
// which means there shouldn't be that many files left
assert(lfs.mtree.root.weight <= (2 << lfs.mbits));
assert(lfs.mtree.weight <= (2 << lfs.mbits));
assert(file1.b.o.mdir.rbyd.weight <= 3);
assert(file2.b.o.mdir.rbyd.weight <= 3);