diff options
author | ondrap <pilat.ondrej@seznam.cz> | 2023-08-02 12:51:52 +0300 |
---|---|---|
committer | Christopher Haster <geky@geky.net> | 2023-09-21 20:18:55 +0300 |
commit | b6373792106f04d8de6b959be61062b89d5b793a (patch) | |
tree | 8149b2f6dc67054c1dfcc839666b68e0a4e25ed8 | |
parent | 1ba4ed03f085d424198c7b14a47cac566b252e39 (diff) |
Update lfs_find_free_blocks to match the latest changes.
-rw-r--r-- | lfs.c | 27 | ||||
-rw-r--r-- | lfs.h | 4 |
2 files changed, 21 insertions, 10 deletions
@@ -654,20 +654,27 @@ static int lfs_alloc(lfs_t *lfs, lfs_block_t *block) { return LFS_ERR_NOSPC; } - lfs->free.off = (lfs->free.off + lfs->free.size) - % lfs->block_count; - lfs->free.size = lfs_min(8*lfs->cfg->lookahead_size, lfs->free.ack); - lfs->free.i = 0; - - // find mask of free blocks from tree - memset(lfs->free.buffer, 0, lfs->cfg->lookahead_size); - int err = lfs_fs_rawtraverse(lfs, lfs_alloc_lookahead, lfs, true); - if (err) { - lfs_alloc_drop(lfs); + int err = lfs_find_free_blocks(lfs); + if(err) { return err; } } } + +int lfs_find_free_blocks(lfs_t *lfs){ + lfs->free.off = (lfs->free.off + lfs->free.size) + % lfs->block_count; + lfs->free.size = lfs_min(8*lfs->cfg->lookahead_size, lfs->free.ack); + lfs->free.i = 0; + + // find mask of free blocks from tree + memset(lfs->free.buffer, 0, lfs->cfg->lookahead_size); + int const err = lfs_fs_rawtraverse(lfs, lfs_alloc_lookahead, lfs, true); + if (err) { + lfs_alloc_drop(lfs); + } + return err; +} #endif /// Metadata pair and directory operations /// @@ -712,6 +712,10 @@ lfs_ssize_t lfs_fs_size(lfs_t *lfs); // Returns a negative error code on failure. int lfs_fs_traverse(lfs_t *lfs, int (*cb)(void*, lfs_block_t), void *data); +// Use Traverse function and try to find free blocks. LittleFS free blocks search is unpredictable. +// Search is costly operation which may delay write. In realtime write scenarios can be better to find them before a write. +int lfs_find_free_blocks(lfs_t *lfs); + #ifndef LFS_READONLY // Attempt to make the filesystem consistent and ready for writing // |