Fix metadata_max==prog_size commit->end calculation #1031
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
I've been trying to dig into some of the early LFS_ERR_NOSPC errors users have been seeing. Some of the problem is that littlefs returns LFS_ERR_NOSPC for both "no space" errors, and internally whenever metadata can't fit in a block/mdir. This has made tracking down the actual root cause a bit tricky.
I did at least find one bug: In mdir compaction we weren't correctly adjusting
commit->end
to reserve space for commit-related metadata (checksums, tail pointers, etc) whenmetadata_max
==prog_size
.This went unnoticed due to a lack of testing and requiring
metadata_max
==prog_size
.Added a quick test to prevent regression, and also added a few more asserts to
lfs_init
related to possiblemetadata_max
configuration mistakes.Found by @ajheck, @dpkristensen, @NLLK, and likely others.
Related #755, #896