t: Tweaked lfsr_btree_traverse so btinfo/mtinfo alias
The traversal logic is a bit simpler if everything can pass around/
populate the same struct, so this reverts some changes made when
implementing lfsr_traversal_t, bringing back bid as a side-channel and
making btinfo/mtinfo typedef aliases.
btinfo/mtinfo are also required arguments for lfsr_btree_traverse/
lfsr_fs_traverse now, so it's even easier to forward these to lower
layers if they alias.
What return-pointers should/shouldn't be optional is still an open
question, but at least for btinfo/mtinfo matching lfs_stat makes sense.
This saves a bit of code/stack:
code stack
before: 34474 2552
after: 34454 (-0.0%) 2544 (-0.3%)
This commit is contained in:
+12
-10
@@ -4092,13 +4092,14 @@ code = '''
|
||||
uint8_t *seen = malloc((BLOCK_COUNT+7)/8);
|
||||
memset(seen, 0, (BLOCK_COUNT+7)/8);
|
||||
|
||||
lfsr_btraversal_t bt = LFSR_BTRAVERSAL();
|
||||
lfsr_btraversal_t bt = LFSR_BTRAVERSAL(0);
|
||||
for (lfs_block_t i = 0;; i++) {
|
||||
// a bit hacky, but this catches infinite loops
|
||||
assert(i <= 2*N);
|
||||
|
||||
lfsr_bid_t bid;
|
||||
lfsr_btinfo_t btinfo;
|
||||
int err = lfsr_btree_traverse(&lfs, &btree, &bt, &btinfo);
|
||||
int err = lfsr_btree_traverse(&lfs, &btree, &bt, &bid, &btinfo);
|
||||
assert(!err || err == LFS_ERR_NOENT);
|
||||
if (err == LFS_ERR_NOENT) {
|
||||
break;
|
||||
@@ -4106,7 +4107,7 @@ code = '''
|
||||
|
||||
if (btinfo.tag == LFSR_TAG_BRANCH) {
|
||||
printf("traversal: %d 0x%x btree 0x%x.%x\n",
|
||||
btinfo.bid,
|
||||
bid,
|
||||
btinfo.tag,
|
||||
btinfo.u.rbyd.blocks[0], btinfo.u.rbyd.trunk);
|
||||
|
||||
@@ -4116,14 +4117,14 @@ code = '''
|
||||
|
||||
} else if (btinfo.tag == LFSR_TAG_DATA) {
|
||||
printf("traversal: %d 0x%x data %d\n",
|
||||
btinfo.bid,
|
||||
bid,
|
||||
btinfo.tag,
|
||||
lfsr_data_size(btinfo.u.data));
|
||||
|
||||
} else {
|
||||
// well this shouldn't happen
|
||||
printf("traversal: %d 0x%x\n",
|
||||
btinfo.bid,
|
||||
bid,
|
||||
btinfo.tag);
|
||||
assert(false);
|
||||
}
|
||||
@@ -4240,13 +4241,14 @@ code = '''
|
||||
uint8_t *seen = malloc((BLOCK_COUNT+7)/8);
|
||||
memset(seen, 0, (BLOCK_COUNT+7)/8);
|
||||
|
||||
lfsr_btraversal_t bt = LFSR_BTRAVERSAL();
|
||||
lfsr_btraversal_t bt = LFSR_BTRAVERSAL(0);
|
||||
for (lfs_block_t i = 0;; i++) {
|
||||
// a bit hacky, but this catches infinite loops
|
||||
assert(i <= 2*N);
|
||||
|
||||
lfsr_bid_t bid;
|
||||
lfsr_btinfo_t btinfo;
|
||||
int err = lfsr_btree_traverse(&lfs, &btree, &bt, &btinfo);
|
||||
int err = lfsr_btree_traverse(&lfs, &btree, &bt, &bid, &btinfo);
|
||||
assert(!err || err == LFS_ERR_NOENT);
|
||||
if (err == LFS_ERR_NOENT) {
|
||||
break;
|
||||
@@ -4254,7 +4256,7 @@ code = '''
|
||||
|
||||
if (btinfo.tag == LFSR_TAG_BRANCH) {
|
||||
printf("traversal: %d 0x%x btree 0x%x.%x\n",
|
||||
btinfo.bid,
|
||||
bid,
|
||||
btinfo.tag,
|
||||
btinfo.u.rbyd.blocks[0], btinfo.u.rbyd.trunk);
|
||||
|
||||
@@ -4264,14 +4266,14 @@ code = '''
|
||||
|
||||
} else if (btinfo.tag == LFSR_TAG_DATA) {
|
||||
printf("traversal: %d 0x%x data %d\n",
|
||||
btinfo.bid,
|
||||
bid,
|
||||
btinfo.tag,
|
||||
lfsr_data_size(btinfo.u.data));
|
||||
|
||||
} else {
|
||||
// well this shouldn't happen
|
||||
printf("traversal: %d 0x%x\n",
|
||||
btinfo.bid,
|
||||
bid,
|
||||
btinfo.tag);
|
||||
assert(false);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user