From 512f23d03c1d62cc19db3b66a2d36b78d762e765 Mon Sep 17 00:00:00 2001 From: Christopher Haster Date: Mon, 29 Dec 2025 01:00:15 -0600 Subject: [PATCH] alloc: Moved ifdefs out of lfs3_alloc_can* functions I'm not sure implicit ifdefs really help with readability. They do redunce the number of lines, but the implicit ifdefs make it harder to figure out what is actually compiled in. The nice thing about explicit ifdefs is they're, well, explicit. This makes it easier to rule out code paths early, and the earlier you can rule things out, the easier it is to focus on what matters for the build you care about. --- TLDR IMO explicit ifdefs are preferable because that make it easier to see what code is being compiled in to what build. No code changes. --- lfs3.c | 52 +++++++++++++++++++++++----------------------------- 1 file changed, 23 insertions(+), 29 deletions(-) diff --git a/lfs3.c b/lfs3.c index f53e761d..adad768b 100644 --- a/lfs3.c +++ b/lfs3.c @@ -10900,8 +10900,8 @@ static inline int lfs3_alloc_ckpoint(lfs3_t *lfs3) { #endif // can we repopulate the lookahead buffer? +#ifndef LFS3_RDONLY static inline bool lfs3_alloc_canlookahead(const lfs3_t *lfs3) { - #ifndef LFS3_RDONLY // below gc_lookahead_thresh? return lfs3_max( lfs3->lookahead.known, @@ -10918,16 +10918,12 @@ static inline bool lfs3_alloc_canlookahead(const lfs3_t *lfs3) { lfs3_min( 8*lfs3->cfg->lookahead_size-1, lfs3->block_count-1)); - #else - // TODO adopt this localized void in flag functions? - (void)lfs3; - return false; - #endif } +#endif // can we repopulate the gbmap? +#if !defined(LFS3_RDONLY) && defined(LFS3_GBMAP) static inline bool lfs3_alloc_canlookgbmap(const lfs3_t *lfs3) { - #if !defined(LFS3_RDONLY) && defined(LFS3_GBMAP) // do we even have a gbmap? return lfs3_f_isgbmap(lfs3->flags) // below gc_lookgbmap_thresh? @@ -10937,18 +10933,14 @@ static inline bool lfs3_alloc_canlookgbmap(const lfs3_t *lfs3) { lfs3->cfg->gc_lookgbmap_thresh, lfs3->cfg->lookgbmap_thresh), lfs3->block_count-1); - #else - // TODO adopt this localized void in flag functions? - (void)lfs3; - return false; - #endif } +#endif // can we pre-erase? +#if !defined(LFS3_RDONLY) \ + && defined(LFS3_GBMAP) \ + && !defined(LFS3_NO_PREERASE) static inline bool lfs3_alloc_canpreerase(const lfs3_t *lfs3) { - #if !defined(LFS3_RDONLY) \ - && defined(LFS3_GBMAP) \ - && !defined(LFS3_NO_PREERASE) // do we even have a gbmap? return lfs3_f_isgbmap(lfs3->flags) // have we pre-erased enough blocks? @@ -10957,23 +10949,15 @@ static inline bool lfs3_alloc_canpreerase(const lfs3_t *lfs3) { // are there any more blocks in our known window? && lfs3->gbmap.preeraser.known < lfs3->gbmap.known; - #else - // TODO adopt this localized void in flag functions? - (void)lfs3; - return false; - #endif } +#endif // is gbmap out-of-sync with disk? +#if !defined(LFS3_RDONLY) && defined(LFS3_GBMAP) static inline bool lfs3_alloc_cansyncgbmap(const lfs3_t *lfs3) { - #if !defined(LFS3_RDONLY) && defined(LFS3_GBMAP) return lfs3_btree_cmp(&lfs3->gbmap.b, &lfs3->gbmap.b_p) != 0; - #else - // TODO adopt this localized void in flag functions? - (void)lfs3; - return false; - #endif } +#endif // discard any lookahead/gbmap windows, this is necessary if block_count // changes @@ -11118,7 +11102,7 @@ static void lfs3_alloc_inc(lfs3_t *lfs3) { // signal that lookahead/gbmap is no longer full if (lfs3_alloc_canlookahead(lfs3) - || lfs3_alloc_canlookgbmap(lfs3)) { + || LFS3_IFDEF_GBMAP(lfs3_alloc_canlookgbmap(lfs3), false)) { lfs3->flags |= LFS3_I_LOOKAHEAD; } } @@ -16779,7 +16763,13 @@ static int lfs3_fs_gc_(lfs3_t *lfs3, lfs3_mgc_t *mgc, } // if we have no pending gc work, can we preerase blocks? - } else if (lfs3_alloc_canpreerase(lfs3)) { + } else if (LFS3_IFDEF_RDONLY( + false, + LFS3_IFDEF_GBMAP( + LFS3_IFDEF_PREERASE( + lfs3_alloc_canpreerase(lfs3), + false), + false))) { #if !defined(LFS3_RDONLY) \ && defined(LFS3_GBMAP) \ && !defined(LFS3_NO_PREERASE) @@ -16791,7 +16781,11 @@ static int lfs3_fs_gc_(lfs3_t *lfs3, lfs3_mgc_t *mgc, // if we have nothing else to do, try to commit the gbmap to // disk so it's recoverable if we lose power - } else if (lfs3_alloc_cansyncgbmap(lfs3)) { + } else if (LFS3_IFDEF_RDONLY( + false, + LFS3_IFDEF_GBMAP( + lfs3_alloc_cansyncgbmap(lfs3), + false))) { #if !defined(LFS3_RDONLY) && defined(LFS3_GBMAP) int err = lfs3_alloc_syncgbmap(lfs3); if (err) {