Changed to a shifted mid=bid.rid representation for debugging

This only matters for developers, not users, but it still helps a lot to
get debug representations right.

Since the exact mid encoding depends on the block_size in an unintuitive
manner, it's tricky to render in a debug-friendly way that is useful
both with and without tools.

Previously, I avoided shifting the bid representation, since this would
be closer to the value in the device, but this hides the actual
structure of the mtree. Now the bid is shifted, showing the underlying
mtree/mdir structure, at the cost of needing to know the number of mbits
to encode the mid back into an integer.

So for example, on a device with 4KiB blocks, or 8 mbits:

  mid=1
  mid=258
  mid=515

Becomes:

  mid=0.1
  mid=1.2
  mid=2.3

This continues to make the mbits a more fundamental part of littlefs,
but that's probably just how that's going to be.
This commit is contained in:
Christopher Haster
2023-09-11 01:59:19 -05:00
parent f9bd2c56e3
commit 900ea807ae
4 changed files with 81 additions and 82 deletions
+21 -21
View File
@@ -3469,7 +3469,7 @@ code = '''
if (tag_ == LFSR_TAG_BTREE) {
lfsr_rbyd_t *branch = (lfsr_rbyd_t *)data_.u.b.buffer;
printf("traversal: %d.%d 0x%x btree 0x%x.%x\n",
mid_ & lfsr_mbidmask(&lfs),
mid_ >> lfs.mbits,
mid_ & lfsr_mridmask(&lfs),
tag_,
branch->block, branch->trunk);
@@ -3479,7 +3479,7 @@ code = '''
} else if (tag_ == LFSR_TAG_MDIR) {
lfsr_mdir_t *mdir = (lfsr_mdir_t*)data_.u.b.buffer;
printf("traversal: %d.%d 0x%x mdir 0x{%x,%x}\n",
mid_ & lfsr_mbidmask(&lfs),
mid_ >> lfs.mbits,
mid_ & lfsr_mridmask(&lfs),
tag_,
mdir->u.m.blocks[0], mdir->u.m.blocks[1]);
@@ -3490,7 +3490,7 @@ code = '''
} else {
// this shouldn't happen
printf("traversal: %d.%d 0x%x %d\n",
mid_ & lfsr_mbidmask(&lfs),
mid_ >> lfs.mbits,
mid_ & lfsr_mridmask(&lfs),
tag_,
lfsr_data_size(&data_));
@@ -3593,7 +3593,7 @@ code = '''
if (tag_ == LFSR_TAG_BTREE) {
lfsr_rbyd_t *branch = (lfsr_rbyd_t *)data_.u.b.buffer;
printf("traversal: %d.%d 0x%x btree 0x%x.%x\n",
mid_ & lfsr_mbidmask(&lfs),
mid_ >> lfs.mbits,
mid_ & lfsr_mridmask(&lfs),
tag_,
branch->block, branch->trunk);
@@ -3603,7 +3603,7 @@ code = '''
} else if (tag_ == LFSR_TAG_MDIR) {
lfsr_mdir_t *mdir = (lfsr_mdir_t*)data_.u.b.buffer;
printf("traversal: %d.%d 0x%x mdir 0x{%x,%x}\n",
mid_ & lfsr_mbidmask(&lfs),
mid_ >> lfs.mbits,
mid_ & lfsr_mridmask(&lfs),
tag_,
mdir->u.m.blocks[0], mdir->u.m.blocks[1]);
@@ -3614,7 +3614,7 @@ code = '''
} else {
// this shouldn't happen
printf("traversal: %d.%d 0x%x %d\n",
mid_ & lfsr_mbidmask(&lfs),
mid_ >> lfs.mbits,
mid_ & lfsr_mridmask(&lfs),
tag_,
lfsr_data_size(&data_));
@@ -3728,7 +3728,7 @@ code = '''
if (tag_ == LFSR_TAG_BTREE) {
lfsr_rbyd_t *branch = (lfsr_rbyd_t *)data_.u.b.buffer;
printf("traversal: %d.%d 0x%x btree 0x%x.%x\n",
mid_ & lfsr_mbidmask(&lfs),
mid_ >> lfs.mbits,
mid_ & lfsr_mridmask(&lfs),
tag_,
branch->block, branch->trunk);
@@ -3738,7 +3738,7 @@ code = '''
} else if (tag_ == LFSR_TAG_MDIR) {
lfsr_mdir_t *mdir = (lfsr_mdir_t*)data_.u.b.buffer;
printf("traversal: %d.%d 0x%x mdir 0x{%x,%x}\n",
mid_ & lfsr_mbidmask(&lfs),
mid_ >> lfs.mbits,
mid_ & lfsr_mridmask(&lfs),
tag_,
mdir->u.m.blocks[0], mdir->u.m.blocks[1]);
@@ -3749,7 +3749,7 @@ code = '''
} else {
// this shouldn't happen
printf("traversal: %d.%d 0x%x %d\n",
mid_ & lfsr_mbidmask(&lfs),
mid_ >> lfs.mbits,
mid_ & lfsr_mridmask(&lfs),
tag_,
lfsr_data_size(&data_));
@@ -3855,7 +3855,7 @@ code = '''
if (tag_ == LFSR_TAG_BTREE) {
lfsr_rbyd_t *branch = (lfsr_rbyd_t *)data_.u.b.buffer;
printf("traversal: %d.%d 0x%x btree 0x%x.%x\n",
mid_ & lfsr_mbidmask(&lfs),
mid_ >> lfs.mbits,
mid_ & lfsr_mridmask(&lfs),
tag_,
branch->block, branch->trunk);
@@ -3865,7 +3865,7 @@ code = '''
} else if (tag_ == LFSR_TAG_MDIR) {
lfsr_mdir_t *mdir = (lfsr_mdir_t*)data_.u.b.buffer;
printf("traversal: %d.%d 0x%x mdir 0x{%x,%x}\n",
mid_ & lfsr_mbidmask(&lfs),
mid_ >> lfs.mbits,
mid_ & lfsr_mridmask(&lfs),
tag_,
mdir->u.m.blocks[0], mdir->u.m.blocks[1]);
@@ -3876,7 +3876,7 @@ code = '''
} else {
// this shouldn't happen
printf("traversal: %d.%d 0x%x %d\n",
mid_ & lfsr_mbidmask(&lfs),
mid_ >> lfs.mbits,
mid_ & lfsr_mridmask(&lfs),
tag_,
lfsr_data_size(&data_));
@@ -3993,7 +3993,7 @@ code = '''
if (tag_ == LFSR_TAG_BTREE) {
lfsr_rbyd_t *branch = (lfsr_rbyd_t *)data_.u.b.buffer;
printf("traversal: %d.%d 0x%x btree 0x%x.%x\n",
mid_ & lfsr_mbidmask(&lfs),
mid_ >> lfs.mbits,
mid_ & lfsr_mridmask(&lfs),
tag_,
branch->block, branch->trunk);
@@ -4003,7 +4003,7 @@ code = '''
} else if (tag_ == LFSR_TAG_MDIR) {
lfsr_mdir_t *mdir = (lfsr_mdir_t*)data_.u.b.buffer;
printf("traversal: %d.%d 0x%x mdir 0x{%x,%x}\n",
mid_ & lfsr_mbidmask(&lfs),
mid_ >> lfs.mbits,
mid_ & lfsr_mridmask(&lfs),
tag_,
mdir->u.m.blocks[0], mdir->u.m.blocks[1]);
@@ -4014,7 +4014,7 @@ code = '''
} else {
// this shouldn't happen
printf("traversal: %d.%d 0x%x %d\n",
mid_ & lfsr_mbidmask(&lfs),
mid_ >> lfs.mbits,
mid_ & lfsr_mridmask(&lfs),
tag_,
lfsr_data_size(&data_));
@@ -4163,7 +4163,7 @@ code = '''
if (tag_ == LFSR_TAG_BTREE) {
lfsr_rbyd_t *branch = (lfsr_rbyd_t *)data_.u.b.buffer;
printf("traversal: %d.%d 0x%x btree 0x%x.%x\n",
mid_ & lfsr_mbidmask(&lfs),
mid_ >> lfs.mbits,
mid_ & lfsr_mridmask(&lfs),
tag_,
branch->block, branch->trunk);
@@ -4173,7 +4173,7 @@ code = '''
} else if (tag_ == LFSR_TAG_MDIR) {
lfsr_mdir_t *mdir = (lfsr_mdir_t*)data_.u.b.buffer;
printf("traversal: %d.%d 0x%x mdir 0x{%x,%x}\n",
mid_ & lfsr_mbidmask(&lfs),
mid_ >> lfs.mbits,
mid_ & lfsr_mridmask(&lfs),
tag_,
mdir->u.m.blocks[0], mdir->u.m.blocks[1]);
@@ -4184,7 +4184,7 @@ code = '''
} else {
// this shouldn't happen
printf("traversal: %d.%d 0x%x %d\n",
mid_ & lfsr_mbidmask(&lfs),
mid_ >> lfs.mbits,
mid_ & lfsr_mridmask(&lfs),
tag_,
lfsr_data_size(&data_));
@@ -4272,21 +4272,21 @@ code = '''
if (tag_ == LFSR_TAG_BTREE) {
lfsr_rbyd_t *branch = (lfsr_rbyd_t *)data_.u.b.buffer;
printf("traversal: %d.%d 0x%x btree 0x%x.%x\n",
mid_ & lfsr_mbidmask(&lfs),
mid_ >> lfs.mbits,
mid_ & lfsr_mridmask(&lfs),
tag_,
branch->block, branch->trunk);
} else if (tag_ == LFSR_TAG_MDIR) {
lfsr_mdir_t *mdir = (lfsr_mdir_t*)data_.u.b.buffer;
printf("traversal: %d.%d 0x%x mdir 0x{%x,%x}\n",
mid_ & lfsr_mbidmask(&lfs),
mid_ >> lfs.mbits,
mid_ & lfsr_mridmask(&lfs),
tag_,
mdir->u.m.blocks[0], mdir->u.m.blocks[1]);
} else {
// this shouldn't happen
printf("traversal: %d.%d 0x%x %d\n",
mid_ & lfsr_mbidmask(&lfs),
mid_ >> lfs.mbits,
mid_ & lfsr_mridmask(&lfs),
tag_,
lfsr_data_size(&data_));