Added scripts/dbglfs.py for debugging the filesystem tree

Currently this can show:

- The filesystem tree:

    $ ./scripts/dbglfs.py disk -B4096
    littlefs v2.0 0x{0,1}.bd4, rev 1, weight 41
    mdir         ids      name                        type
    {00ce,00cf}:      0.1 dir0000                     dir 0x1070c73
    {0090,0091}:     2.30 |-> child0000               dir 0x8ec7fb2
    {0042,0043}:    24.35 |   |-> grandchild0000      dir 0x32d990b
    {0009,000a}:     25.0 |   |-> grandchild0001      dir 0x1461a08
                     25.1 |   |-> grandchild0002      dir 0x216e9fc
                     25.2 |   |-> grandchild0003      dir 0x7d6aff
                     25.3 |   |-> grandchild0004      dir 0x4b70e14
                     25.4 |   |-> grandchild0005      dir 0x6dc8d17
                     25.5 |   |-> grandchild0006      dir 0x58c7ee3
                     25.6 |   '-> grandchild0007      dir 0x7e7fde0
    {0090,0091}:     2.31 |-> child0001               dir 0xa87fcb1
    {0077,0078}:     29.1 |   |-> grandchild0000      dir 0x12194f5
                     29.2 |   |-> grandchild0001      dir 0x34a17f6
    ...

- The on-disk filesystem config:

    $ ./scripts/dbglfs.py disk -B4096 -c
    littlefs v2.0 0x{0,1}.bd4, rev 1, weight 41
    mdir         ids      tag                     data (truncated)
         config: major_version 2                  02                       .
                 minor_version 0                  00                       .
                 csum_type 2                      02                       .
                 flags 0                          00                       .
                 block_size 4096                  80 20                    .
                 block_count 256                  80 02                    ..
    ...

- Any global-state on-disk:

    $ ./scripts/dbglfs.py disk -B4096 -g -d
    littlefs v2.0 0x{0,1}.bd4, rev 1, weight 41
    mdir         ids      tag                     data (truncated)
         gstate: grm none                         00 00 00 cc 05 57 ff 7f .....W..
    {0000,0001}:       -1 grm 8                   01 03 24 cc 05 57 ff 7f ..$..W..
    {00ce,00cf}:        0 grm 3                   00 2f 1b                ./.
    {00d0,00d1}:        1 grm 3                   01 04 01                ...

  Note this already reveals a bug, since grm none should be all zeros.

Also made some other minor tweaks to dbg scripts for consistency.
This commit is contained in:
Christopher Haster
2023-07-12 13:19:58 -05:00
parent 61c51b699a
commit b98ac119c7
4 changed files with 1159 additions and 15 deletions
+6 -2
View File
@@ -3505,7 +3505,7 @@ static int lfsr_rbyd_dnamelookup(lfs_t *lfs, const lfsr_rbyd_t *rbyd,
// bisect search space
if (lfs_cmp(cmp) > 0) {
upper = id__-weight__ + 1;
upper = id__ - (weight__-1);
} else if (lfs_cmp(cmp) < 0) {
lower = id__ + 1;
@@ -7459,14 +7459,18 @@ int lfsr_dir_read(lfs_t *lfs, lfsr_dir_t *dir, struct lfs_info *info) {
/// Prepare the filesystem for mutation ///
static int lfsr_fs_fixgrm(lfs_t *lfs) {
LFS_ASSERT(lfs->grm_.mid != LFSR_MID_RM);
// find our mdir
lfsr_mdir_t mdir;
LFS_ASSERT((lfs_size_t)lfs->grm_.mid < lfs->mtree.weight);
int err = lfsr_mtree_lookup(lfs, lfs->grm_.mid, &mdir);
if (err) {
return err;
}
// remove the rid while also zeroing our grm
LFS_ASSERT(lfs->grm_.rid < mdir.rbyd.weight);
err = lfsr_mdir_commit(lfs, &mdir, (lfs_ssize_t*)&lfs->grm_.rid, LFSR_ATTRS(
LFSR_ATTR(lfs->grm_.rid, UNR, -1, NULL, 0),
LFSR_ATTR(-1, GRM, 0, NULL, 0)));
@@ -7478,7 +7482,7 @@ static int lfsr_fs_fixgrm(lfs_t *lfs) {
static int lfsr_fs_preparemutation(lfs_t *lfs) {
// fix pending grms
if (lfs->grm_.mid >= 0) {
if (lfs->grm_.mid != LFSR_MID_RM) {
LFS_DEBUG("Fixing grm (0x%"PRIx32".%"PRIx32")",
lfs->grm_.mid,
lfs->grm_.rid);