From 42ead30339778ba1effdc82ab3905a7baef6df09 Mon Sep 17 00:00:00 2001 From: Christopher Haster Date: Mon, 13 Aug 2018 14:08:30 -0500 Subject: [PATCH] WIP Tweaked inline files to support inline_max == cache_size --- lfs.c | 9 ++++++--- tests/test_alloc.sh | 8 +++++--- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/lfs.c b/lfs.c index 54e7c6f..eda0912 100644 --- a/lfs.c +++ b/lfs.c @@ -142,7 +142,7 @@ static inline void lfs_cache_zero(lfs_t *lfs, lfs_cache_t *pcache) { static int lfs_cache_flush(lfs_t *lfs, lfs_cache_t *pcache, lfs_cache_t *rcache, bool validate) { - if (pcache->block != 0xffffffff) { + if (pcache->block != 0xffffffff && pcache->block != 0xfffffffe) { LFS_ASSERT(pcache->block < lfs->cfg->block_count); lfs_size_t diff = lfs_alignup(pcache->size, lfs->cfg->prog_size); int err = lfs->cfg->prog(lfs->cfg, pcache->block, @@ -2158,7 +2158,10 @@ static int lfs_file_relocate(lfs_t *lfs, lfs_file_t *file) { return 0; relocate: - continue; + LFS_DEBUG("Bad block at %"PRIu32, nblock); + + // just clear cache and try a new block + lfs_cache_drop(lfs, &lfs->pcache); } } @@ -2397,7 +2400,7 @@ lfs_ssize_t lfs_file_write(lfs_t *lfs, lfs_file_t *file, } if ((file->flags & LFS_F_INLINE) && - file->pos + nsize >= lfs->inline_max) { + file->pos + nsize > lfs->inline_max) { // inline file doesn't fit anymore file->block = 0xfffffffe; file->off = file->pos; diff --git a/tests/test_alloc.sh b/tests/test_alloc.sh index 55d1043..21fee96 100755 --- a/tests/test_alloc.sh +++ b/tests/test_alloc.sh @@ -341,6 +341,10 @@ tests/test.py << TEST } lfs_file_close(&lfs, &file[0]) => 0; + // remount to force reset of lookahead + lfs_unmount(&lfs) => 0; + lfs_mount(&lfs, &cfg) => 0; + // open hole lfs_remove(&lfs, "bump") => 0; @@ -350,7 +354,7 @@ tests/test.py << TEST for (lfs_size_t i = 0; i < cfg.block_size; i += 2) { memcpy(&buffer[i], "hi", 2); } - lfs_file_write(&lfs, &file[0], buffer, cfg.block_size) => LFS_ERR_NOSPC; + lfs_file_write(&lfs, &file[0], buffer, 2*cfg.block_size) => LFS_ERR_NOSPC; lfs_file_close(&lfs, &file[0]) => 0; lfs_unmount(&lfs) => 0; @@ -388,7 +392,6 @@ tests/test.py << TEST // remount to force reset of lookahead lfs_unmount(&lfs) => 0; - lfs_mount(&lfs, &cfg) => 0; // rewrite one file @@ -451,7 +454,6 @@ tests/test.py << TEST // remount to force reset of lookahead lfs_unmount(&lfs) => 0; - lfs_mount(&lfs, &cfg) => 0; // rewrite one file with a hole of one block