diff --git a/littlefs/.github/workflows/release.yml b/littlefs/.github/workflows/release.yml index 61b2972..5ccc9e0 100644 --- a/littlefs/.github/workflows/release.yml +++ b/littlefs/.github/workflows/release.yml @@ -112,7 +112,7 @@ jobs: table[$i,$j]=$c_camel ((j+=1)) - for s in code stack struct + for s in code stack structs do f=sizes/thumb${c:+-$c}.$s.csv [ -e $f ] && table[$i,$j]=$( \ diff --git a/littlefs/DESIGN.md b/littlefs/DESIGN.md index 1d02ba3..9c9703a 100644 --- a/littlefs/DESIGN.md +++ b/littlefs/DESIGN.md @@ -59,7 +59,7 @@ This leaves us with three major requirements for an embedded filesystem. RAM to temporarily store filesystem metadata. For ROM, this means we need to keep our design simple and reuse code paths - were possible. For RAM we have a stronger requirement, all RAM usage is + where possible. For RAM we have a stronger requirement, all RAM usage is bounded. This means RAM usage does not grow as the filesystem changes in size or number of files. This creates a unique challenge as even presumably simple operations, such as traversing the filesystem, become surprisingly @@ -626,7 +626,7 @@ log₂_n_ pointers that skip to different preceding elements of the skip-list. The name comes from heavy use of the [CTZ instruction][wikipedia-ctz], which -lets us calculate the power-of-two factors efficiently. For a give block _n_, +lets us calculate the power-of-two factors efficiently. For a given block _n_, that block contains ctz(_n_)+1 pointers. ``` diff --git a/littlefs/lfs.c b/littlefs/lfs.c index aed1b07..a152687 100644 --- a/littlefs/lfs.c +++ b/littlefs/lfs.c @@ -2151,9 +2151,11 @@ static int lfs_dir_splittingcompact(lfs_t *lfs, lfs_mdir_t *dir, return size; } - // do we have extra space? littlefs can't reclaim this space - // by itself, so expand cautiously - if ((lfs_size_t)size < lfs->block_count/2) { + // littlefs cannot reclaim expanded superblocks, so expand cautiously + // + // if our filesystem is more than ~88% full, don't expand, this is + // somewhat arbitrary + if (lfs->block_count - size > lfs->block_count/8) { LFS_DEBUG("Expanding superblock at rev %"PRIu32, dir->rev); int err = lfs_dir_split(lfs, dir, attrs, attrcount, source, begin, end);