From ab59ab7f8da800afe9d87418a0ce772e0e2a9418 Mon Sep 17 00:00:00 2001 From: Christopher Haster Date: Mon, 29 Sep 2025 13:49:58 -0500 Subject: [PATCH] Bump default inline_max up to 1/4 block size As noted by amgross, the current inline_max default (when littlefs switches from inline files to CTZ skip-lists) does not match the theoretical value in DESIGN.md. The reason for this is 1/8 was chosen as a safer default during development, due to concerns that 1/4 + mdirs splitting at 1/2 would lead to poor distribution of large inline files in mdirs. However, two things have happened since then: 1. Experiments have show "wasted" mdir space is less of a concern than initially thought. Extra mdir space contributes to logging, delays mdir compaction, and can overall lead to better performance. 2. inline_size was added as a configuration option, so if 1/4 is problematic users can always override it. So bumping this back up to 1/4 may make sense. --- lfs.c | 4 ++-- lfs.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lfs.c b/lfs.c index 624f43cc..5cdd2ecb 100644 --- a/lfs.c +++ b/lfs.c @@ -4331,7 +4331,7 @@ static int lfs_init(lfs_t *lfs, const struct lfs_config *cfg) { LFS_ASSERT(lfs->cfg->inline_max == (lfs_size_t)-1 || lfs->cfg->inline_max <= ((lfs->cfg->metadata_max) ? lfs->cfg->metadata_max - : lfs->cfg->block_size)/8); + : lfs->cfg->block_size)/4); lfs->inline_max = lfs->cfg->inline_max; if (lfs->inline_max == (lfs_size_t)-1) { lfs->inline_max = 0; @@ -4342,7 +4342,7 @@ static int lfs_init(lfs_t *lfs, const struct lfs_config *cfg) { lfs->attr_max, ((lfs->cfg->metadata_max) ? lfs->cfg->metadata_max - : lfs->cfg->block_size)/8)); + : lfs->cfg->block_size)/4)); } // setup default state diff --git a/lfs.h b/lfs.h index 215309c5..dbdf66a0 100644 --- a/lfs.h +++ b/lfs.h @@ -277,7 +277,7 @@ struct lfs_config { // Optional upper limit on inlined files in bytes. Inlined files live in // metadata and decrease storage requirements, but may be limited to // improve metadata-related performance. Must be <= cache_size, <= - // attr_max, and <= block_size/8. Defaults to the largest possible + // attr_max, and <= block_size/4. Defaults to the largest possible // inline_max when zero. // // Set to -1 to disable inlined files.