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.
This commit is contained in:
Christopher Haster
2025-11-13 13:08:42 -06:00
parent b01a385bc9
commit 4ccc8dc120
4 changed files with 28 additions and 2 deletions

16
lfs3.c
View File

@ -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),

8
lfs3.h
View File

@ -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

View File

@ -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

View File

@ -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)