diff options
author | Christopher Haster <geky@geky.net> | 2023-09-12 07:42:37 +0300 |
---|---|---|
committer | Christopher Haster <geky@geky.net> | 2023-09-21 20:23:36 +0300 |
commit | dbe4598c12a9b1e6cab2f8dc78158755b64a1e6d (patch) | |
tree | b40d1cda835330f29527db9ff516c260ae8b6d74 /lfs.c | |
parent | d85a0fe2e2f1a2c48d80b05a29c3c60a28c7e3b0 (diff) |
Added API boilerplate for lfs_fs_findfreeblocks and consistent style
This adds the tracing and optional locking for the littlefs API.
Also updated to match the code style, and added LFS_READONLY guards
where necessary.
Diffstat (limited to 'lfs.c')
-rw-r--r-- | lfs.c | 55 |
1 files changed, 37 insertions, 18 deletions
@@ -623,6 +623,26 @@ static void lfs_alloc_drop(lfs_t *lfs) { } #ifndef LFS_READONLY +static int lfs_fs_rawfindfreeblocks(lfs_t *lfs) { + // Move free offset at the first unused block (lfs->free.i) + // lfs->free.i is equal lfs->free.size when all blocks are used + lfs->free.off = (lfs->free.off + lfs->free.i) % 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); + return err; + } + + return 0; +} +#endif + +#ifndef LFS_READONLY static int lfs_alloc(lfs_t *lfs, lfs_block_t *block) { while (true) { while (lfs->free.i != lfs->free.size) { @@ -654,29 +674,12 @@ static int lfs_alloc(lfs_t *lfs, lfs_block_t *block) { return LFS_ERR_NOSPC; } - int err = lfs_find_free_blocks(lfs); + int err = lfs_fs_rawfindfreeblocks(lfs); if(err) { return err; } } } - -int lfs_find_free_blocks(lfs_t *lfs){ - // Move free offset at the first unused block (lfs->free.i) - // lfs->free.i is equal lfs->free.size when all blocks are used - lfs->free.off = (lfs->free.off + lfs->free.i) - % 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 /// @@ -6248,6 +6251,22 @@ int lfs_fs_traverse(lfs_t *lfs, int (*cb)(void *, lfs_block_t), void *data) { } #ifndef LFS_READONLY +int lfs_fs_findfreeblocks(lfs_t *lfs) { + int err = LFS_LOCK(lfs->cfg); + if (err) { + return err; + } + LFS_TRACE("lfs_fs_findfreeblocks(%p)", (void*)lfs); + + err = lfs_fs_rawfindfreeblocks(lfs); + + LFS_TRACE("lfs_fs_findfreeblocks -> %d", err); + LFS_UNLOCK(lfs->cfg); + return err; +} +#endif + +#ifndef LFS_READONLY int lfs_fs_mkconsistent(lfs_t *lfs) { int err = LFS_LOCK(lfs->cfg); if (err) { |