From 4ccc8dc1204e56826a32ce2d8cd6817af2dc21ca Mon Sep 17 00:00:00 2001 From: Christopher Haster Date: Thu, 13 Nov 2025 13:08:42 -0600 Subject: [PATCH] Added support for all mount-traversal flags in lfs3_format I mean, why not? These redirect to the same internal lfs3_fs_gc_ function anyways. Might as well keep things consistent. Added: LFS3_F_MKCONSISTENT 0x00000800 Make the filesystem consistent LFS3_F_RELOOKAHEAD 0x00001000 Repopulate lookahead buffer LFS3_F_MKCONSISTENT is guaranteed to be a noop, but LFS3_F_RELOOKAHEAD forces a filesystem traversal, which may have some niche use case. No code changes. --- lfs3.c | 16 ++++++++++++++-- lfs3.h | 8 ++++++++ scripts/dbgflags.py | 2 ++ tests/test_mount.toml | 4 ++++ 4 files changed, 28 insertions(+), 2 deletions(-) diff --git a/lfs3.c b/lfs3.c index b7952769..d7ef7501 100644 --- a/lfs3.c +++ b/lfs3.c @@ -16180,6 +16180,12 @@ int lfs3_format(lfs3_t *lfs3, uint32_t flags, #ifdef LFS3_YES_CKDATACKSUMS flags |= LFS3_F_CKDATACKSUMS; #endif + #ifdef LFS3_YES_MKCONSISTENT + flags |= LFS3_F_MKCONSISTENT; + #endif + #ifdef LFS3_YES_RELOOKAHEAD + flags |= LFS3_F_RELOOKAHEAD; + #endif #ifdef LFS3_YES_REGBMAP flags |= LFS3_F_REGBMAP; #endif @@ -16203,6 +16209,8 @@ int lfs3_format(lfs3_t *lfs3, uint32_t flags, | LFS3_IFDEF_CKFETCHES(LFS3_F_CKFETCHES, 0) | LFS3_IFDEF_CKMETAPARITY(LFS3_F_CKMETAPARITY, 0) | LFS3_IFDEF_CKDATACKSUMS(LFS3_F_CKDATACKSUMS, 0) + | LFS3_F_MKCONSISTENT + | LFS3_F_RELOOKAHEAD | LFS3_IFDEF_GBMAP(LFS3_F_REGBMAP, 0) | LFS3_F_COMPACTMETA | LFS3_F_CKMETA @@ -16242,14 +16250,18 @@ int lfs3_format(lfs3_t *lfs3, uint32_t flags, // run gc if requested if (flags & ( - LFS3_IFDEF_GBMAP(LFS3_F_REGBMAP, 0) + LFS3_F_MKCONSISTENT + | LFS3_F_RELOOKAHEAD + | LFS3_IFDEF_GBMAP(LFS3_F_REGBMAP, 0) | LFS3_F_COMPACTMETA | LFS3_F_CKMETA | LFS3_F_CKDATA)) { lfs3_mgc_t mgc; err = lfs3_fs_gc_(lfs3, &mgc, flags & ( - LFS3_IFDEF_GBMAP(LFS3_F_REGBMAP, 0) + LFS3_F_MKCONSISTENT + | LFS3_F_RELOOKAHEAD + | LFS3_IFDEF_GBMAP(LFS3_F_REGBMAP, 0) | LFS3_F_COMPACTMETA | LFS3_F_CKMETA | LFS3_F_CKDATA), diff --git a/lfs3.h b/lfs3.h index 503570b9..0866d195 100644 --- a/lfs3.h +++ b/lfs3.h @@ -196,6 +196,14 @@ enum lfs3_type { #define LFS3_F_CKDATACKSUMS \ 0x01000000 // Check data checksums on reads #endif +#ifndef LFS3_RDONLY +#define LFS3_F_MKCONSISTENT \ + 0x00000800 // Make the filesystem consistent +#endif +#ifndef LFS3_RDONLY +#define LFS3_F_RELOOKAHEAD \ + 0x00001000 // Repopulate lookahead buffer +#endif #if !defined(LFS3_RDONLY) && defined(LFS3_GBMAP) #define LFS3_F_REGBMAP 0x00002000 // Repopulate the gbmap #endif diff --git a/scripts/dbgflags.py b/scripts/dbgflags.py index 0f113727..2b080362 100755 --- a/scripts/dbgflags.py +++ b/scripts/dbgflags.py @@ -80,6 +80,8 @@ F_CKFETCHES = 0x00200000 # y- Check block checksums before first use F_CKMETAPARITY = 0x00400000 # y- Check metadata tag parity bits F_CKDATACKSUMS = 0x01000000 # y- Check data checksums on reads +F_MKCONSISTENT = 0x00000800 # y- Make the filesystem consistent +F_RELOOKAHEAD = 0x00001000 # y- Repopulate lookahead buffer F_REGBMAP = 0x00002000 # y- Repopulate the gbmap F_COMPACTMETA = 0x00008000 # y- Compact metadata logs F_CKMETA = 0x00010000 # y- Check metadata checksums diff --git a/tests/test_mount.toml b/tests/test_mount.toml index c74422e9..42cead5f 100644 --- a/tests/test_mount.toml +++ b/tests/test_mount.toml @@ -107,6 +107,8 @@ defines.CKPROGS = [false, true] defines.CKFETCHES = [false, true] defines.CKMETAPARITY = [false, true] defines.CKDATACKSUMS = [false, true] +defines.MKCONSISTENT = [false, true] +defines.RELOOKAHEAD = [false, true] defines.REGBMAP = [false, true] defines.COMPACTMETA = [false, true] defines.CKMETA = [false, true] @@ -136,6 +138,8 @@ code = ''' | ((CKDATACKSUMS) ? LFS3_IFDEF_CKDATACKSUMS(LFS3_F_CKDATACKSUMS, -1) : 0) + | ((MKCONSISTENT) ? LFS3_F_MKCONSISTENT : 0) + | ((RELOOKAHEAD) ? LFS3_F_RELOOKAHEAD : 0) | ((REGBMAP) ? LFS3_IFDEF_GBMAP(LFS3_F_REGBMAP, -1) : 0)