Added LFS3_F_REGBMAP and LFS3_F_COMPACTMETA

These are unlikely to make much progress, but that doesn't seem like a
great reason to disallow these flags in lfs3_format:

  LFS3_F_REGBMAP      0x00002000  Repopulate the gbmap
  LFS3_F_COMPACTMETA  0x00008000  Compact metadata logs

These are actually guaranteed to do _no_ work when formatting _without_
the gbmap, but with the gbmap it's less clear. Looking forward to the
planned ckfactory feature, these may be useful for cleaning up any rbyd
commits created as a part of building the initial gbmap.

---

Also tweaked the formatting for LFS3_F_* flags a bit, including making
all ifdefs explicit (mainly ifdef LFS3_RDONLY). Mixed ifdefs are a real
pain to read.

No code changes.
This commit is contained in:
Christopher Haster
2025-11-13 02:29:12 -06:00
parent 9e75138f7a
commit b01a385bc9
4 changed files with 62 additions and 33 deletions
+22 -10
View File
@@ -15870,7 +15870,7 @@ int lfs3_mount(lfs3_t *lfs3, uint32_t flags,
flags |= LFS3_M_RELOOKAHEAD;
#endif
#ifdef LFS3_YES_REGBMAP
flags |= LFS3_YES_REGBMAP;
flags |= LFS3_M_REGBMAP;
#endif
#ifdef LFS3_YES_COMPACTMETA
flags |= LFS3_M_COMPACTMETA;
@@ -16159,6 +16159,9 @@ static int lfs3_formatinited(lfs3_t *lfs3) {
#ifndef LFS3_RDONLY
int lfs3_format(lfs3_t *lfs3, uint32_t flags,
const struct lfs3_cfg *cfg) {
#ifdef LFS3_YES_GBMAP
flags |= LFS3_F_GBMAP;
#endif
#ifdef LFS3_YES_REVDBG
flags |= LFS3_F_REVDBG;
#endif
@@ -16177,39 +16180,44 @@ int lfs3_format(lfs3_t *lfs3, uint32_t flags,
#ifdef LFS3_YES_CKDATACKSUMS
flags |= LFS3_F_CKDATACKSUMS;
#endif
#ifdef LFS3_YES_REGBMAP
flags |= LFS3_F_REGBMAP;
#endif
#ifdef LFS3_YES_COMPACTMETA
flags |= LFS3_F_COMPACTMETA;
#endif
#ifdef LFS3_YES_CKMETA
flags |= LFS3_F_CKMETA;
#endif
#ifdef LFS3_YES_CKDATA
flags |= LFS3_F_CKDATA;
#endif
#ifdef LFS3_YES_GBMAP
flags |= LFS3_F_GBMAP;
#endif
// unknown flags?
LFS3_ASSERT((flags & ~(
LFS3_F_RDWR
| LFS3_IFDEF_GBMAP(LFS3_F_GBMAP, 0)
| LFS3_IFDEF_REVDBG(LFS3_F_REVDBG, 0)
| LFS3_IFDEF_REVNOISE(LFS3_F_REVNOISE, 0)
| LFS3_IFDEF_CKPROGS(LFS3_F_CKPROGS, 0)
| LFS3_IFDEF_CKFETCHES(LFS3_F_CKFETCHES, 0)
| LFS3_IFDEF_CKMETAPARITY(LFS3_F_CKMETAPARITY, 0)
| LFS3_IFDEF_CKDATACKSUMS(LFS3_F_CKDATACKSUMS, 0)
| LFS3_IFDEF_GBMAP(LFS3_F_REGBMAP, 0)
| LFS3_F_COMPACTMETA
| LFS3_F_CKMETA
| LFS3_F_CKDATA
| LFS3_IFDEF_GBMAP(LFS3_F_GBMAP, 0))) == 0);
| LFS3_F_CKDATA)) == 0);
int err = lfs3_init(lfs3,
flags & (
LFS3_F_RDWR
| LFS3_IFDEF_GBMAP(LFS3_F_GBMAP, 0)
| LFS3_IFDEF_REVDBG(LFS3_F_REVDBG, 0)
| LFS3_IFDEF_REVNOISE(LFS3_F_REVNOISE, 0)
| LFS3_IFDEF_CKPROGS(LFS3_F_CKPROGS, 0)
| LFS3_IFDEF_CKFETCHES(LFS3_F_CKFETCHES, 0)
| LFS3_IFDEF_CKMETAPARITY(LFS3_F_CKMETAPARITY, 0)
| LFS3_IFDEF_CKDATACKSUMS(LFS3_F_CKDATACKSUMS, 0)
| LFS3_IFDEF_GBMAP(LFS3_F_GBMAP, 0)),
| LFS3_IFDEF_CKDATACKSUMS(LFS3_F_CKDATACKSUMS, 0)),
cfg);
if (err) {
return err;
@@ -16234,12 +16242,16 @@ int lfs3_format(lfs3_t *lfs3, uint32_t flags,
// run gc if requested
if (flags & (
LFS3_F_CKMETA
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_F_CKMETA
LFS3_IFDEF_GBMAP(LFS3_F_REGBMAP, 0)
| LFS3_F_COMPACTMETA
| LFS3_F_CKMETA
| LFS3_F_CKDATA),
-1);
if (err) {