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:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user