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.
diff --git a/lfs.c b/lfs.c index 624f43c..5cdd2ec 100644 --- a/lfs.c +++ b/lfs.c
@@ -4331,7 +4331,7 @@ 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 @@ 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 215309c..dbdf66a 100644 --- a/lfs.h +++ b/lfs.h
@@ -277,7 +277,7 @@ // 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.