Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/littlefs-project/littlefs.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristopher Haster <geky@geky.net>2022-11-12 00:05:34 +0300
committerChristopher Haster <geky@geky.net>2023-09-12 08:39:09 +0300
commit027331b2f094d1327b23c25054ddaae652d30ea2 (patch)
tree35c458422c98481554dc7ed54e9327dc6e0bd302
parent9c23329dd7daae78c3515eca8940668cfe6074dc (diff)
Adopted erase_size/erase_count config in test block-devices/runners
In separating the configuration of littlefs from the physical geometry of the underlying device, we can no longer rely solely on lfs_config to contain all of the information necessary for the simulated block devices we use for testing. This adds a new lfs_*bd_config struct for each of the block devices, and new erase_size/erase_count fields. The erase_* name was chosen since these reflect the (simulated) physical erase size and count of erase-sized blocks, unlike the block_* variants which represent logical block sizes used for littlefs's bookkeeping. It may be worth adopting erase_size/erase_count in littlefs's config at some point in the future, but at the moment doesn't seem necessary. Changing the lfs_bd_config structs to be required is probably a good idea anyways, as it moves us more towards separating the bds from littlefs. Though we can't quite get rid of the lfs_config parameter because of the block-device API in lfs_config. Eventually it would be nice to get rid of it, but that would require API breakage.
-rw-r--r--bd/lfs_emubd.c105
-rw-r--r--bd/lfs_emubd.h18
-rw-r--r--bd/lfs_filebd.c43
-rw-r--r--bd/lfs_filebd.h21
-rw-r--r--bd/lfs_rambd.c65
-rw-r--r--bd/lfs_rambd.h19
-rw-r--r--runners/bench_runner.c28
-rw-r--r--runners/bench_runner.h32
-rw-r--r--runners/test_runner.c52
-rw-r--r--runners/test_runner.h34
-rw-r--r--tests/test_alloc.toml16
-rw-r--r--tests/test_badblocks.toml6
-rw-r--r--tests/test_exhaustion.toml10
13 files changed, 248 insertions, 201 deletions
diff --git a/bd/lfs_emubd.c b/bd/lfs_emubd.c
index 546a90c..c27ae30 100644
--- a/bd/lfs_emubd.c
+++ b/bd/lfs_emubd.c
@@ -48,6 +48,7 @@ static void lfs_emubd_decblock(lfs_emubd_block_t *block) {
static lfs_emubd_block_t *lfs_emubd_mutblock(
const struct lfs_config *cfg,
lfs_emubd_block_t **block) {
+ lfs_emubd_t *bd = cfg->context;
lfs_emubd_block_t *block_ = *block;
if (block_ && block_->rc == 1) {
// rc == 1? can modify
@@ -56,13 +57,13 @@ static lfs_emubd_block_t *lfs_emubd_mutblock(
} else if (block_) {
// rc > 1? need to create a copy
lfs_emubd_block_t *nblock = malloc(
- sizeof(lfs_emubd_block_t) + cfg->block_size);
+ sizeof(lfs_emubd_block_t) + bd->cfg->erase_size);
if (!nblock) {
return NULL;
}
memcpy(nblock, block_,
- sizeof(lfs_emubd_block_t) + cfg->block_size);
+ sizeof(lfs_emubd_block_t) + bd->cfg->erase_size);
nblock->rc = 1;
lfs_emubd_decblock(block_);
@@ -72,7 +73,7 @@ static lfs_emubd_block_t *lfs_emubd_mutblock(
} else {
// no block? need to allocate
lfs_emubd_block_t *nblock = malloc(
- sizeof(lfs_emubd_block_t) + cfg->block_size);
+ sizeof(lfs_emubd_block_t) + bd->cfg->erase_size);
if (!nblock) {
return NULL;
}
@@ -81,10 +82,9 @@ static lfs_emubd_block_t *lfs_emubd_mutblock(
nblock->wear = 0;
// zero for consistency
- lfs_emubd_t *bd = cfg->context;
memset(nblock->data,
(bd->cfg->erase_value != -1) ? bd->cfg->erase_value : 0,
- cfg->block_size);
+ bd->cfg->erase_size);
*block = nblock;
return nblock;
@@ -94,22 +94,22 @@ static lfs_emubd_block_t *lfs_emubd_mutblock(
// emubd create/destroy
-int lfs_emubd_createcfg(const struct lfs_config *cfg, const char *path,
+int lfs_emubd_create(const struct lfs_config *cfg,
const struct lfs_emubd_config *bdcfg) {
- LFS_EMUBD_TRACE("lfs_emubd_createcfg(%p {.context=%p, "
- ".read=%p, .prog=%p, .erase=%p, .sync=%p, "
- ".read_size=%"PRIu32", .prog_size=%"PRIu32", "
- ".block_size=%"PRIu32", .block_count=%"PRIu32"}, "
- "\"%s\", "
- "%p {.erase_value=%"PRId32", .erase_cycles=%"PRIu32", "
+ LFS_EMUBD_TRACE("lfs_emubd_create(%p {.context=%p, "
+ ".read=%p, .prog=%p, .erase=%p, .sync=%p}, "
+ "%p {.read_size=%"PRIu32", .prog_size=%"PRIu32", "
+ ".erase_size=%"PRIu32", .erase_count=%"PRIu32", "
+ ".erase_value=%"PRId32", .erase_cycles=%"PRIu32", "
".badblock_behavior=%"PRIu8", .power_cycles=%"PRIu32", "
".powerloss_behavior=%"PRIu8", .powerloss_cb=%p, "
".powerloss_data=%p, .track_branches=%d})",
(void*)cfg, cfg->context,
(void*)(uintptr_t)cfg->read, (void*)(uintptr_t)cfg->prog,
(void*)(uintptr_t)cfg->erase, (void*)(uintptr_t)cfg->sync,
- cfg->read_size, cfg->prog_size, cfg->block_size, cfg->block_count,
- path, (void*)bdcfg, bdcfg->erase_value, bdcfg->erase_cycles,
+ (void*)bdcfg,
+ bdcfg->read_size, bdcfg->prog_size, bdcfg->erase_size,
+ bdcfg->erase_count, bdcfg->erase_value, bdcfg->erase_cycles,
bdcfg->badblock_behavior, bdcfg->power_cycles,
bdcfg->powerloss_behavior, (void*)(uintptr_t)bdcfg->powerloss_cb,
bdcfg->powerloss_data, bdcfg->track_branches);
@@ -117,12 +117,12 @@ int lfs_emubd_createcfg(const struct lfs_config *cfg, const char *path,
bd->cfg = bdcfg;
// allocate our block array, all blocks start as uninitialized
- bd->blocks = malloc(cfg->block_count * sizeof(lfs_emubd_block_t*));
+ bd->blocks = malloc(bd->cfg->erase_count * sizeof(lfs_emubd_block_t*));
if (!bd->blocks) {
- LFS_EMUBD_TRACE("lfs_emubd_createcfg -> %d", LFS_ERR_NOMEM);
+ LFS_EMUBD_TRACE("lfs_emubd_create -> %d", LFS_ERR_NOMEM);
return LFS_ERR_NOMEM;
}
- memset(bd->blocks, 0, cfg->block_count * sizeof(lfs_emubd_block_t*));
+ memset(bd->blocks, 0, bd->cfg->erase_count * sizeof(lfs_emubd_block_t*));
// setup testing things
bd->readed = 0;
@@ -134,7 +134,7 @@ int lfs_emubd_createcfg(const struct lfs_config *cfg, const char *path,
if (bd->cfg->disk_path) {
bd->disk = malloc(sizeof(lfs_emubd_disk_t));
if (!bd->disk) {
- LFS_EMUBD_TRACE("lfs_emubd_createcfg -> %d", LFS_ERR_NOMEM);
+ LFS_EMUBD_TRACE("lfs_emubd_create -> %d", LFS_ERR_NOMEM);
return LFS_ERR_NOMEM;
}
bd->disk->rc = 1;
@@ -156,21 +156,21 @@ int lfs_emubd_createcfg(const struct lfs_config *cfg, const char *path,
// if we're emulating erase values, we can keep a block around in
// memory of just the erase state to speed up emulated erases
if (bd->cfg->erase_value != -1) {
- bd->disk->scratch = malloc(cfg->block_size);
+ bd->disk->scratch = malloc(bd->cfg->erase_size);
if (!bd->disk->scratch) {
- LFS_EMUBD_TRACE("lfs_emubd_createcfg -> %d", LFS_ERR_NOMEM);
+ LFS_EMUBD_TRACE("lfs_emubd_create -> %d", LFS_ERR_NOMEM);
return LFS_ERR_NOMEM;
}
memset(bd->disk->scratch,
bd->cfg->erase_value,
- cfg->block_size);
+ bd->cfg->erase_size);
// go ahead and erase all of the disk, otherwise the file will not
// match our internal representation
- for (size_t i = 0; i < cfg->block_count; i++) {
+ for (size_t i = 0; i < bd->cfg->erase_count; i++) {
ssize_t res = write(bd->disk->fd,
bd->disk->scratch,
- cfg->block_size);
+ bd->cfg->erase_size);
if (res < 0) {
int err = -errno;
LFS_EMUBD_TRACE("lfs_emubd_create -> %d", err);
@@ -180,33 +180,16 @@ int lfs_emubd_createcfg(const struct lfs_config *cfg, const char *path,
}
}
- LFS_EMUBD_TRACE("lfs_emubd_createcfg -> %d", 0);
+ LFS_EMUBD_TRACE("lfs_emubd_create -> %d", 0);
return 0;
}
-int lfs_emubd_create(const struct lfs_config *cfg, const char *path) {
- LFS_EMUBD_TRACE("lfs_emubd_create(%p {.context=%p, "
- ".read=%p, .prog=%p, .erase=%p, .sync=%p, "
- ".read_size=%"PRIu32", .prog_size=%"PRIu32", "
- ".block_size=%"PRIu32", .block_count=%"PRIu32"}, "
- "\"%s\")",
- (void*)cfg, cfg->context,
- (void*)(uintptr_t)cfg->read, (void*)(uintptr_t)cfg->prog,
- (void*)(uintptr_t)cfg->erase, (void*)(uintptr_t)cfg->sync,
- cfg->read_size, cfg->prog_size, cfg->block_size, cfg->block_count,
- path);
- static const struct lfs_emubd_config defaults = {.erase_value=-1};
- int err = lfs_emubd_createcfg(cfg, path, &defaults);
- LFS_EMUBD_TRACE("lfs_emubd_create -> %d", err);
- return err;
-}
-
int lfs_emubd_destroy(const struct lfs_config *cfg) {
LFS_EMUBD_TRACE("lfs_emubd_destroy(%p)", (void*)cfg);
lfs_emubd_t *bd = cfg->context;
// decrement reference counts
- for (lfs_block_t i = 0; i < cfg->block_count; i++) {
+ for (lfs_block_t i = 0; i < bd->cfg->erase_count; i++) {
lfs_emubd_decblock(bd->blocks[i]);
}
free(bd->blocks);
@@ -237,10 +220,10 @@ int lfs_emubd_read(const struct lfs_config *cfg, lfs_block_t block,
lfs_emubd_t *bd = cfg->context;
// check if read is valid
- LFS_ASSERT(!cfg->block_count || block < cfg->block_count);
- LFS_ASSERT(off % cfg->read_size == 0);
- LFS_ASSERT(size % cfg->read_size == 0);
- LFS_ASSERT(off+size <= cfg->block_size);
+ LFS_ASSERT(block < bd->cfg->erase_count);
+ LFS_ASSERT(off % bd->cfg->read_size == 0);
+ LFS_ASSERT(size % bd->cfg->read_size == 0);
+ LFS_ASSERT(off+size <= bd->cfg->erase_size);
// get the block
const lfs_emubd_block_t *b = bd->blocks[block];
@@ -287,10 +270,10 @@ int lfs_emubd_prog(const struct lfs_config *cfg, lfs_block_t block,
lfs_emubd_t *bd = cfg->context;
// check if write is valid
- LFS_ASSERT(!cfg->block_count || block < cfg->block_count);
- LFS_ASSERT(off % cfg->prog_size == 0);
- LFS_ASSERT(size % cfg->prog_size == 0);
- LFS_ASSERT(off+size <= cfg->block_size);
+ LFS_ASSERT(block < bd->cfg->erase_count);
+ LFS_ASSERT(off % bd->cfg->prog_size == 0);
+ LFS_ASSERT(size % bd->cfg->prog_size == 0);
+ LFS_ASSERT(off+size <= bd->cfg->erase_size);
// get the block
lfs_emubd_block_t *b = lfs_emubd_mutblock(cfg, &bd->blocks[block]);
@@ -327,7 +310,7 @@ int lfs_emubd_prog(const struct lfs_config *cfg, lfs_block_t block,
// mirror to disk file?
if (bd->disk) {
off_t res1 = lseek(bd->disk->fd,
- (off_t)block*cfg->block_size + (off_t)off,
+ (off_t)block*bd->cfg->erase_size + (off_t)off,
SEEK_SET);
if (res1 < 0) {
int err = -errno;
@@ -372,11 +355,11 @@ int lfs_emubd_prog(const struct lfs_config *cfg, lfs_block_t block,
int lfs_emubd_erase(const struct lfs_config *cfg, lfs_block_t block) {
LFS_EMUBD_TRACE("lfs_emubd_erase(%p, 0x%"PRIx32" (%"PRIu32"))",
- (void*)cfg, block, cfg->block_size);
+ (void*)cfg, block, ((lfs_emubd_t*)cfg->context)->cfg->erase_size);
lfs_emubd_t *bd = cfg->context;
// check if erase is valid
- LFS_ASSERT(!cfg->block_count || block < cfg->block_count);
+ LFS_ASSERT(block < bd->cfg->erase_count);
// get the block
lfs_emubd_block_t *b = lfs_emubd_mutblock(cfg, &bd->blocks[block]);
@@ -405,12 +388,12 @@ int lfs_emubd_erase(const struct lfs_config *cfg, lfs_block_t block) {
// emulate an erase value?
if (bd->cfg->erase_value != -1) {
- memset(b->data, bd->cfg->erase_value, cfg->block_size);
+ memset(b->data, bd->cfg->erase_value, bd->cfg->erase_size);
// mirror to disk file?
if (bd->disk) {
off_t res1 = lseek(bd->disk->fd,
- (off_t)block*cfg->block_size,
+ (off_t)block*bd->cfg->erase_size,
SEEK_SET);
if (res1 < 0) {
int err = -errno;
@@ -420,7 +403,7 @@ int lfs_emubd_erase(const struct lfs_config *cfg, lfs_block_t block) {
ssize_t res2 = write(bd->disk->fd,
bd->disk->scratch,
- cfg->block_size);
+ bd->cfg->erase_size);
if (res2 < 0) {
int err = -errno;
LFS_EMUBD_TRACE("lfs_emubd_erase -> %d", err);
@@ -430,7 +413,7 @@ int lfs_emubd_erase(const struct lfs_config *cfg, lfs_block_t block) {
}
// track erases
- bd->erased += cfg->block_size;
+ bd->erased += bd->cfg->erase_size;
if (bd->cfg->erase_sleep) {
int err = nanosleep(&(struct timespec){
.tv_sec=bd->cfg->erase_sleep/1000000000,
@@ -573,7 +556,7 @@ lfs_emubd_swear_t lfs_emubd_wear(const struct lfs_config *cfg,
lfs_emubd_t *bd = cfg->context;
// check if block is valid
- LFS_ASSERT(block < cfg->block_count);
+ LFS_ASSERT(block < bd->cfg->erase_count);
// get the wear
lfs_emubd_wear_t wear;
@@ -595,7 +578,7 @@ int lfs_emubd_setwear(const struct lfs_config *cfg,
lfs_emubd_t *bd = cfg->context;
// check if block is valid
- LFS_ASSERT(block < cfg->block_count);
+ LFS_ASSERT(block < bd->cfg->erase_count);
// set the wear
lfs_emubd_block_t *b = lfs_emubd_mutblock(cfg, &bd->blocks[block]);
@@ -635,13 +618,13 @@ int lfs_emubd_copy(const struct lfs_config *cfg, lfs_emubd_t *copy) {
lfs_emubd_t *bd = cfg->context;
// lazily copy over our block array
- copy->blocks = malloc(cfg->block_count * sizeof(lfs_emubd_block_t*));
+ copy->blocks = malloc(bd->cfg->erase_count * sizeof(lfs_emubd_block_t*));
if (!copy->blocks) {
LFS_EMUBD_TRACE("lfs_emubd_copy -> %d", LFS_ERR_NOMEM);
return LFS_ERR_NOMEM;
}
- for (size_t i = 0; i < cfg->block_count; i++) {
+ for (size_t i = 0; i < bd->cfg->erase_count; i++) {
copy->blocks[i] = lfs_emubd_incblock(bd->blocks[i]);
}
diff --git a/bd/lfs_emubd.h b/bd/lfs_emubd.h
index 35a411f..9049649 100644
--- a/bd/lfs_emubd.h
+++ b/bd/lfs_emubd.h
@@ -67,6 +67,18 @@ typedef int64_t lfs_emubd_ssleep_t;
// emubd config, this is required for testing
struct lfs_emubd_config {
+ // Minimum size of a read operation in bytes.
+ lfs_size_t read_size;
+
+ // Minimum size of a program operation in bytes.
+ lfs_size_t prog_size;
+
+ // Size of an erase operation in bytes.
+ lfs_size_t erase_size;
+
+ // Number of erase blocks on the device.
+ lfs_size_t erase_count;
+
// 8-bit erase value to use for simulating erases. -1 does not simulate
// erases, which can speed up testing by avoiding the extra block-device
// operations to store the erase value.
@@ -149,11 +161,7 @@ typedef struct lfs_emubd {
/// Block device API ///
// Create an emulating block device using the geometry in lfs_config
-//
-// Note that filebd is used if a path is provided, if path is NULL
-// emubd will use rambd which can be much faster.
-int lfs_emubd_create(const struct lfs_config *cfg, const char *path);
-int lfs_emubd_createcfg(const struct lfs_config *cfg, const char *path,
+int lfs_emubd_create(const struct lfs_config *cfg,
const struct lfs_emubd_config *bdcfg);
// Clean up memory associated with block device
diff --git a/bd/lfs_filebd.c b/bd/lfs_filebd.c
index 780c8f9..4ff25d4 100644
--- a/bd/lfs_filebd.c
+++ b/bd/lfs_filebd.c
@@ -15,18 +15,22 @@
#include <windows.h>
#endif
-int lfs_filebd_create(const struct lfs_config *cfg, const char *path) {
+int lfs_filebd_create(const struct lfs_config *cfg, const char *path,
+ const struct lfs_filebd_config *bdcfg) {
LFS_FILEBD_TRACE("lfs_filebd_create(%p {.context=%p, "
- ".read=%p, .prog=%p, .erase=%p, .sync=%p, "
- ".read_size=%"PRIu32", .prog_size=%"PRIu32", "
- ".block_size=%"PRIu32", .block_count=%"PRIu32"}, "
- "\"%s\")",
+ ".read=%p, .prog=%p, .erase=%p, .sync=%p}, "
+ "\"%s\", "
+ "%p {.read_size=%"PRIu32", .prog_size=%"PRIu32", "
+ ".erase_size=%"PRIu32", .erase_count=%"PRIu32"})",
(void*)cfg, cfg->context,
(void*)(uintptr_t)cfg->read, (void*)(uintptr_t)cfg->prog,
(void*)(uintptr_t)cfg->erase, (void*)(uintptr_t)cfg->sync,
- cfg->read_size, cfg->prog_size, cfg->block_size, cfg->block_count,
- path, (void*)bdcfg, bdcfg->erase_value);
+ path,
+ (void*)bdcfg,
+ bdcfg->read_size, bdcfg->prog_size, bdcfg->erase_size,
+ bdcfg->erase_count);
lfs_filebd_t *bd = cfg->context;
+ bd->cfg = bdcfg;
// open file
#ifdef _WIN32
@@ -66,17 +70,17 @@ int lfs_filebd_read(const struct lfs_config *cfg, lfs_block_t block,
lfs_filebd_t *bd = cfg->context;
// check if read is valid
- LFS_ASSERT(block < cfg->block_count);
- LFS_ASSERT(off % cfg->read_size == 0);
- LFS_ASSERT(size % cfg->read_size == 0);
- LFS_ASSERT(off+size <= cfg->block_size);
+ LFS_ASSERT(block < bd->cfg->erase_count);
+ LFS_ASSERT(off % bd->cfg->read_size == 0);
+ LFS_ASSERT(size % bd->cfg->read_size == 0);
+ LFS_ASSERT(off+size <= bd->cfg->erase_size);
// zero for reproducibility (in case file is truncated)
memset(buffer, 0, size);
// read
off_t res1 = lseek(bd->fd,
- (off_t)block*cfg->block_size + (off_t)off, SEEK_SET);
+ (off_t)block*bd->cfg->erase_size + (off_t)off, SEEK_SET);
if (res1 < 0) {
int err = -errno;
LFS_FILEBD_TRACE("lfs_filebd_read -> %d", err);
@@ -102,14 +106,14 @@ int lfs_filebd_prog(const struct lfs_config *cfg, lfs_block_t block,
lfs_filebd_t *bd = cfg->context;
// check if write is valid
- LFS_ASSERT(block < cfg->block_count);
- LFS_ASSERT(off % cfg->prog_size == 0);
- LFS_ASSERT(size % cfg->prog_size == 0);
- LFS_ASSERT(off+size <= cfg->block_size);
+ LFS_ASSERT(block < bd->cfg->erase_count);
+ LFS_ASSERT(off % bd->cfg->prog_size == 0);
+ LFS_ASSERT(size % bd->cfg->prog_size == 0);
+ LFS_ASSERT(off+size <= bd->cfg->erase_size);
// program data
off_t res1 = lseek(bd->fd,
- (off_t)block*cfg->block_size + (off_t)off, SEEK_SET);
+ (off_t)block*bd->cfg->erase_size + (off_t)off, SEEK_SET);
if (res1 < 0) {
int err = -errno;
LFS_FILEBD_TRACE("lfs_filebd_prog -> %d", err);
@@ -129,10 +133,11 @@ int lfs_filebd_prog(const struct lfs_config *cfg, lfs_block_t block,
int lfs_filebd_erase(const struct lfs_config *cfg, lfs_block_t block) {
LFS_FILEBD_TRACE("lfs_filebd_erase(%p, 0x%"PRIx32" (%"PRIu32"))",
- (void*)cfg, block, cfg->block_size);
+ (void*)cfg, block, ((lfs_file_t*)cfg->context)->cfg->erase_size);
+ lfs_filebd_t *bd = cfg->context;
// check if erase is valid
- LFS_ASSERT(block < cfg->block_count);
+ LFS_ASSERT(block < bd->cfg->erase_count);
// erase is a noop
(void)block;
diff --git a/bd/lfs_filebd.h b/bd/lfs_filebd.h
index 0f24996..d7d2fd9 100644
--- a/bd/lfs_filebd.h
+++ b/bd/lfs_filebd.h
@@ -26,14 +26,31 @@ extern "C"
#endif
#endif
+// filebd config
+struct lfs_filebd_config {
+ // Minimum size of a read operation in bytes.
+ lfs_size_t read_size;
+
+ // Minimum size of a program operation in bytes.
+ lfs_size_t prog_size;
+
+ // Size of an erase operation in bytes.
+ lfs_size_t erase_size;
+
+ // Number of erase blocks on the device.
+ lfs_size_t erase_count;
+};
+
// filebd state
typedef struct lfs_filebd {
int fd;
+ const struct lfs_filebd_config *cfg;
} lfs_filebd_t;
-// Create a file block device using the geometry in lfs_config
-int lfs_filebd_create(const struct lfs_config *cfg, const char *path);
+// Create a file block device
+int lfs_filebd_create(const struct lfs_config *cfg, const char *path,
+ const struct lfs_filebd_config *bdcfg);
// Clean up memory associated with block device
int lfs_filebd_destroy(const struct lfs_config *cfg);
diff --git a/bd/lfs_rambd.c b/bd/lfs_rambd.c
index ab180b9..a6a0572 100644
--- a/bd/lfs_rambd.c
+++ b/bd/lfs_rambd.c
@@ -7,18 +7,19 @@
*/
#include "bd/lfs_rambd.h"
-int lfs_rambd_createcfg(const struct lfs_config *cfg,
+int lfs_rambd_create(const struct lfs_config *cfg,
const struct lfs_rambd_config *bdcfg) {
- LFS_RAMBD_TRACE("lfs_rambd_createcfg(%p {.context=%p, "
- ".read=%p, .prog=%p, .erase=%p, .sync=%p, "
- ".read_size=%"PRIu32", .prog_size=%"PRIu32", "
- ".block_size=%"PRIu32", .block_count=%"PRIu32"}, "
- "%p {.buffer=%p})",
+ LFS_RAMBD_TRACE("lfs_rambd_create(%p {.context=%p, "
+ ".read=%p, .prog=%p, .erase=%p, .sync=%p}, "
+ "%p {.read_size=%"PRIu32", .prog_size=%"PRIu32", "
+ ".erase_size=%"PRIu32", .erase_count=%"PRIu32", "
+ ".buffer=%p})",
(void*)cfg, cfg->context,
(void*)(uintptr_t)cfg->read, (void*)(uintptr_t)cfg->prog,
(void*)(uintptr_t)cfg->erase, (void*)(uintptr_t)cfg->sync,
- cfg->read_size, cfg->prog_size, cfg->block_size, cfg->block_count,
- (void*)bdcfg, bdcfg->buffer);
+ (void*)bdcfg,
+ bdcfg->read_size, bdcfg->prog_size, bdcfg->erase_size,
+ bdcfg->erase_count, bdcfg->buffer);
lfs_rambd_t *bd = cfg->context;
bd->cfg = bdcfg;
@@ -26,35 +27,20 @@ int lfs_rambd_createcfg(const struct lfs_config *cfg,
if (bd->cfg->buffer) {
bd->buffer = bd->cfg->buffer;
} else {
- bd->buffer = lfs_malloc(cfg->block_size * cfg->block_count);
+ bd->buffer = lfs_malloc(bd->cfg->erase_size * bd->cfg->erase_count);
if (!bd->buffer) {
- LFS_RAMBD_TRACE("lfs_rambd_createcfg -> %d", LFS_ERR_NOMEM);
+ LFS_RAMBD_TRACE("lfs_rambd_create -> %d", LFS_ERR_NOMEM);
return LFS_ERR_NOMEM;
}
}
// zero for reproducibility
- memset(bd->buffer, 0, cfg->block_size * cfg->block_count);
+ memset(bd->buffer, 0, bd->cfg->erase_size * bd->cfg->erase_count);
- LFS_RAMBD_TRACE("lfs_rambd_createcfg -> %d", 0);
+ LFS_RAMBD_TRACE("lfs_rambd_create -> %d", 0);
return 0;
}
-int lfs_rambd_create(const struct lfs_config *cfg) {
- LFS_RAMBD_TRACE("lfs_rambd_create(%p {.context=%p, "
- ".read=%p, .prog=%p, .erase=%p, .sync=%p, "
- ".read_size=%"PRIu32", .prog_size=%"PRIu32", "
- ".block_size=%"PRIu32", .block_count=%"PRIu32"})",
- (void*)cfg, cfg->context,
- (void*)(uintptr_t)cfg->read, (void*)(uintptr_t)cfg->prog,
- (void*)(uintptr_t)cfg->erase, (void*)(uintptr_t)cfg->sync,
- cfg->read_size, cfg->prog_size, cfg->block_size, cfg->block_count);
- static const struct lfs_rambd_config defaults = {0};
- int err = lfs_rambd_createcfg(cfg, &defaults);
- LFS_RAMBD_TRACE("lfs_rambd_create -> %d", err);
- return err;
-}
-
int lfs_rambd_destroy(const struct lfs_config *cfg) {
LFS_RAMBD_TRACE("lfs_rambd_destroy(%p)", (void*)cfg);
// clean up memory
@@ -74,13 +60,13 @@ int lfs_rambd_read(const struct lfs_config *cfg, lfs_block_t block,
lfs_rambd_t *bd = cfg->context;
// check if read is valid
- LFS_ASSERT(block < cfg->block_count);
- LFS_ASSERT(off % cfg->read_size == 0);
- LFS_ASSERT(size % cfg->read_size == 0);
- LFS_ASSERT(off+size <= cfg->block_size);
+ LFS_ASSERT(block < bd->cfg->erase_count);
+ LFS_ASSERT(off % bd->cfg->read_size == 0);
+ LFS_ASSERT(size % bd->cfg->read_size == 0);
+ LFS_ASSERT(off+size <= bd->cfg->erase_size);
// read data
- memcpy(buffer, &bd->buffer[block*cfg->block_size + off], size);
+ memcpy(buffer, &bd->buffer[block*bd->cfg->erase_size + off], size);
LFS_RAMBD_TRACE("lfs_rambd_read -> %d", 0);
return 0;
@@ -94,13 +80,13 @@ int lfs_rambd_prog(const struct lfs_config *cfg, lfs_block_t block,
lfs_rambd_t *bd = cfg->context;
// check if write is valid
- LFS_ASSERT(block < cfg->block_count);
- LFS_ASSERT(off % cfg->prog_size == 0);
- LFS_ASSERT(size % cfg->prog_size == 0);
- LFS_ASSERT(off+size <= cfg->block_size);
+ LFS_ASSERT(block < bd->cfg->erase_count);
+ LFS_ASSERT(off % bd->cfg->prog_size == 0);
+ LFS_ASSERT(size % bd->cfg->prog_size == 0);
+ LFS_ASSERT(off+size <= bd->cfg->erase_size);
// program data
- memcpy(&bd->buffer[block*cfg->block_size + off], buffer, size);
+ memcpy(&bd->buffer[block*bd->cfg->erase_size + off], buffer, size);
LFS_RAMBD_TRACE("lfs_rambd_prog -> %d", 0);
return 0;
@@ -108,10 +94,11 @@ int lfs_rambd_prog(const struct lfs_config *cfg, lfs_block_t block,
int lfs_rambd_erase(const struct lfs_config *cfg, lfs_block_t block) {
LFS_RAMBD_TRACE("lfs_rambd_erase(%p, 0x%"PRIx32" (%"PRIu32"))",
- (void*)cfg, block, cfg->block_size);
+ (void*)cfg, block, ((lfs_rambd_t*)cfg->context)->cfg->erase_size);
+ lfs_rambd_t *bd = cfg->context;
// check if erase is valid
- LFS_ASSERT(block < cfg->block_count);
+ LFS_ASSERT(block < bd->cfg->erase_count);
// erase is a noop
(void)block;
diff --git a/bd/lfs_rambd.h b/bd/lfs_rambd.h
index 3424680..8663702 100644
--- a/bd/lfs_rambd.h
+++ b/bd/lfs_rambd.h
@@ -26,8 +26,20 @@ extern "C"
#endif
#endif
-// rambd config (optional)
+// rambd config
struct lfs_rambd_config {
+ // Minimum size of a read operation in bytes.
+ lfs_size_t read_size;
+
+ // Minimum size of a program operation in bytes.
+ lfs_size_t prog_size;
+
+ // Size of an erase operation in bytes.
+ lfs_size_t erase_size;
+
+ // Number of erase blocks on the device.
+ lfs_size_t erase_count;
+
// Optional statically allocated buffer for the block device.
void *buffer;
};
@@ -39,9 +51,8 @@ typedef struct lfs_rambd {
} lfs_rambd_t;
-// Create a RAM block device using the geometry in lfs_config
-int lfs_rambd_create(const struct lfs_config *cfg);
-int lfs_rambd_createcfg(const struct lfs_config *cfg,
+// Create a RAM block device
+int lfs_rambd_create(const struct lfs_config *cfg,
const struct lfs_rambd_config *bdcfg);
// Clean up memory associated with block device
diff --git a/runners/bench_runner.c b/runners/bench_runner.c
index ba791b2..f4dce22 100644
--- a/runners/bench_runner.c
+++ b/runners/bench_runner.c
@@ -1271,9 +1271,9 @@ static void list_geometries(void) {
builtin_geometries[g].name,
READ_SIZE,
PROG_SIZE,
- BLOCK_SIZE,
- BLOCK_COUNT,
- BLOCK_SIZE*BLOCK_COUNT);
+ ERASE_SIZE,
+ ERASE_COUNT,
+ ERASE_SIZE*ERASE_COUNT);
}
}
@@ -1324,6 +1324,10 @@ void perm_run(
};
struct lfs_emubd_config bdcfg = {
+ .read_size = READ_SIZE,
+ .prog_size = PROG_SIZE,
+ .erase_size = ERASE_SIZE,
+ .erase_count = ERASE_COUNT,
.erase_value = ERASE_VALUE,
.erase_cycles = ERASE_CYCLES,
.badblock_behavior = BADBLOCK_BEHAVIOR,
@@ -1333,7 +1337,7 @@ void perm_run(
.erase_sleep = bench_erase_sleep,
};
- int err = lfs_emubd_createcfg(&cfg, bench_disk_path, &bdcfg);
+ int err = lfs_emubd_create(&cfg, &bdcfg);
if (err) {
fprintf(stderr, "error: could not create block device: %d\n", err);
exit(-1);
@@ -1761,19 +1765,19 @@ invalid_define:
= BENCH_LIT(sizes[0]);
geometry->defines[PROG_SIZE_i]
= BENCH_LIT(sizes[1]);
- geometry->defines[BLOCK_SIZE_i]
+ geometry->defines[ERASE_SIZE_i]
= BENCH_LIT(sizes[2]);
} else if (count >= 2) {
geometry->defines[PROG_SIZE_i]
= BENCH_LIT(sizes[0]);
- geometry->defines[BLOCK_SIZE_i]
+ geometry->defines[ERASE_SIZE_i]
= BENCH_LIT(sizes[1]);
} else {
- geometry->defines[BLOCK_SIZE_i]
+ geometry->defines[ERASE_SIZE_i]
= BENCH_LIT(sizes[0]);
}
if (count >= 4) {
- geometry->defines[BLOCK_COUNT_i]
+ geometry->defines[ERASE_COUNT_i]
= BENCH_LIT(sizes[3]);
}
optarg = s;
@@ -1805,19 +1809,19 @@ invalid_define:
= BENCH_LIT(sizes[0]);
geometry->defines[PROG_SIZE_i]
= BENCH_LIT(sizes[1]);
- geometry->defines[BLOCK_SIZE_i]
+ geometry->defines[ERASE_SIZE_i]
= BENCH_LIT(sizes[2]);
} else if (count >= 2) {
geometry->defines[PROG_SIZE_i]
= BENCH_LIT(sizes[0]);
- geometry->defines[BLOCK_SIZE_i]
+ geometry->defines[ERASE_SIZE_i]
= BENCH_LIT(sizes[1]);
} else {
- geometry->defines[BLOCK_SIZE_i]
+ geometry->defines[ERASE_SIZE_i]
= BENCH_LIT(sizes[0]);
}
if (count >= 4) {
- geometry->defines[BLOCK_COUNT_i]
+ geometry->defines[ERASE_COUNT_i]
= BENCH_LIT(sizes[3]);
}
optarg = s;
diff --git a/runners/bench_runner.h b/runners/bench_runner.h
index 6296c09..b072970 100644
--- a/runners/bench_runner.h
+++ b/runners/bench_runner.h
@@ -89,18 +89,22 @@ intmax_t bench_define(size_t define);
#define READ_SIZE_i 0
#define PROG_SIZE_i 1
-#define BLOCK_SIZE_i 2
-#define BLOCK_COUNT_i 3
-#define CACHE_SIZE_i 4
-#define LOOKAHEAD_SIZE_i 5
-#define BLOCK_CYCLES_i 6
-#define ERASE_VALUE_i 7
-#define ERASE_CYCLES_i 8
-#define BADBLOCK_BEHAVIOR_i 9
-#define POWERLOSS_BEHAVIOR_i 10
+#define ERASE_SIZE_i 2
+#define ERASE_COUNT_i 3
+#define BLOCK_SIZE_i 4
+#define BLOCK_COUNT_i 5
+#define CACHE_SIZE_i 6
+#define LOOKAHEAD_SIZE_i 7
+#define BLOCK_CYCLES_i 8
+#define ERASE_VALUE_i 9
+#define ERASE_CYCLES_i 10
+#define BADBLOCK_BEHAVIOR_i 11
+#define POWERLOSS_BEHAVIOR_i 12
#define READ_SIZE bench_define(READ_SIZE_i)
#define PROG_SIZE bench_define(PROG_SIZE_i)
+#define ERASE_SIZE bench_define(ERASE_SIZE_i)
+#define ERASE_COUNT bench_define(ERASE_COUNT_i)
#define BLOCK_SIZE bench_define(BLOCK_SIZE_i)
#define BLOCK_COUNT bench_define(BLOCK_COUNT_i)
#define CACHE_SIZE bench_define(CACHE_SIZE_i)
@@ -113,9 +117,11 @@ intmax_t bench_define(size_t define);
#define BENCH_IMPLICIT_DEFINES \
BENCH_DEF(READ_SIZE, PROG_SIZE) \
- BENCH_DEF(PROG_SIZE, BLOCK_SIZE) \
- BENCH_DEF(BLOCK_SIZE, 0) \
- BENCH_DEF(BLOCK_COUNT, (1024*1024)/BLOCK_SIZE) \
+ BENCH_DEF(PROG_SIZE, ERASE_SIZE) \
+ BENCH_DEF(ERASE_SIZE, 0) \
+ BENCH_DEF(ERASE_COUNT, (1024*1024)/BLOCK_SIZE) \
+ BENCH_DEF(BLOCK_SIZE, ERASE_SIZE) \
+ BENCH_DEF(BLOCK_COUNT, ERASE_COUNT/lfs_max(BLOCK_SIZE/ERASE_SIZE,1))\
BENCH_DEF(CACHE_SIZE, lfs_max(64,lfs_max(READ_SIZE,PROG_SIZE))) \
BENCH_DEF(LOOKAHEAD_SIZE, 16) \
BENCH_DEF(BLOCK_CYCLES, -1) \
@@ -125,7 +131,7 @@ intmax_t bench_define(size_t define);
BENCH_DEF(POWERLOSS_BEHAVIOR, LFS_EMUBD_POWERLOSS_NOOP)
#define BENCH_GEOMETRY_DEFINE_COUNT 4
-#define BENCH_IMPLICIT_DEFINE_COUNT 11
+#define BENCH_IMPLICIT_DEFINE_COUNT 13
#endif
diff --git a/runners/test_runner.c b/runners/test_runner.c
index 27f8524..13befdc 100644
--- a/runners/test_runner.c
+++ b/runners/test_runner.c
@@ -1312,9 +1312,9 @@ static void list_geometries(void) {
builtin_geometries[g].name,
READ_SIZE,
PROG_SIZE,
- BLOCK_SIZE,
- BLOCK_COUNT,
- BLOCK_SIZE*BLOCK_COUNT);
+ ERASE_SIZE,
+ ERASE_COUNT,
+ ERASE_SIZE*ERASE_COUNT);
}
}
@@ -1352,6 +1352,10 @@ static void run_powerloss_none(
};
struct lfs_emubd_config bdcfg = {
+ .read_size = READ_SIZE,
+ .prog_size = PROG_SIZE,
+ .erase_size = ERASE_SIZE,
+ .erase_count = ERASE_COUNT,
.erase_value = ERASE_VALUE,
.erase_cycles = ERASE_CYCLES,
.badblock_behavior = BADBLOCK_BEHAVIOR,
@@ -1361,7 +1365,7 @@ static void run_powerloss_none(
.erase_sleep = test_erase_sleep,
};
- int err = lfs_emubd_createcfg(&cfg, test_disk_path, &bdcfg);
+ int err = lfs_emubd_create(&cfg, &bdcfg);
if (err) {
fprintf(stderr, "error: could not create block device: %d\n", err);
exit(-1);
@@ -1424,6 +1428,10 @@ static void run_powerloss_linear(
};
struct lfs_emubd_config bdcfg = {
+ .read_size = READ_SIZE,
+ .prog_size = PROG_SIZE,
+ .erase_size = ERASE_SIZE,
+ .erase_count = ERASE_COUNT,
.erase_value = ERASE_VALUE,
.erase_cycles = ERASE_CYCLES,
.badblock_behavior = BADBLOCK_BEHAVIOR,
@@ -1437,7 +1445,7 @@ static void run_powerloss_linear(
.powerloss_data = &powerloss_jmp,
};
- int err = lfs_emubd_createcfg(&cfg, test_disk_path, &bdcfg);
+ int err = lfs_emubd_create(&cfg, &bdcfg);
if (err) {
fprintf(stderr, "error: could not create block device: %d\n", err);
exit(-1);
@@ -1513,6 +1521,10 @@ static void run_powerloss_log(
};
struct lfs_emubd_config bdcfg = {
+ .read_size = READ_SIZE,
+ .prog_size = PROG_SIZE,
+ .erase_size = ERASE_SIZE,
+ .erase_count = ERASE_COUNT,
.erase_value = ERASE_VALUE,
.erase_cycles = ERASE_CYCLES,
.badblock_behavior = BADBLOCK_BEHAVIOR,
@@ -1526,7 +1538,7 @@ static void run_powerloss_log(
.powerloss_data = &powerloss_jmp,
};
- int err = lfs_emubd_createcfg(&cfg, test_disk_path, &bdcfg);
+ int err = lfs_emubd_create(&cfg, &bdcfg);
if (err) {
fprintf(stderr, "error: could not create block device: %d\n", err);
exit(-1);
@@ -1600,6 +1612,10 @@ static void run_powerloss_cycles(
};
struct lfs_emubd_config bdcfg = {
+ .read_size = READ_SIZE,
+ .prog_size = PROG_SIZE,
+ .erase_size = ERASE_SIZE,
+ .erase_count = ERASE_COUNT,
.erase_value = ERASE_VALUE,
.erase_cycles = ERASE_CYCLES,
.badblock_behavior = BADBLOCK_BEHAVIOR,
@@ -1613,7 +1629,7 @@ static void run_powerloss_cycles(
.powerloss_data = &powerloss_jmp,
};
- int err = lfs_emubd_createcfg(&cfg, test_disk_path, &bdcfg);
+ int err = lfs_emubd_create(&cfg, &bdcfg);
if (err) {
fprintf(stderr, "error: could not create block device: %d\n", err);
exit(-1);
@@ -1785,6 +1801,10 @@ static void run_powerloss_exhaustive(
};
struct lfs_emubd_config bdcfg = {
+ .read_size = READ_SIZE,
+ .prog_size = PROG_SIZE,
+ .erase_size = ERASE_SIZE,
+ .erase_count = ERASE_COUNT,
.erase_value = ERASE_VALUE,
.erase_cycles = ERASE_CYCLES,
.badblock_behavior = BADBLOCK_BEHAVIOR,
@@ -1797,7 +1817,7 @@ static void run_powerloss_exhaustive(
.powerloss_data = NULL,
};
- int err = lfs_emubd_createcfg(&cfg, test_disk_path, &bdcfg);
+ int err = lfs_emubd_create(&cfg, &bdcfg);
if (err) {
fprintf(stderr, "error: could not create block device: %d\n", err);
exit(-1);
@@ -2314,19 +2334,19 @@ invalid_define:
= TEST_LIT(sizes[0]);
geometry->defines[PROG_SIZE_i]
= TEST_LIT(sizes[1]);
- geometry->defines[BLOCK_SIZE_i]
+ geometry->defines[ERASE_SIZE_i]
= TEST_LIT(sizes[2]);
} else if (count >= 2) {
geometry->defines[PROG_SIZE_i]
= TEST_LIT(sizes[0]);
- geometry->defines[BLOCK_SIZE_i]
+ geometry->defines[ERASE_SIZE_i]
= TEST_LIT(sizes[1]);
} else {
- geometry->defines[BLOCK_SIZE_i]
+ geometry->defines[ERASE_SIZE_i]
= TEST_LIT(sizes[0]);
}
if (count >= 4) {
- geometry->defines[BLOCK_COUNT_i]
+ geometry->defines[ERASE_COUNT_i]
= TEST_LIT(sizes[3]);
}
optarg = s;
@@ -2358,19 +2378,19 @@ invalid_define:
= TEST_LIT(sizes[0]);
geometry->defines[PROG_SIZE_i]
= TEST_LIT(sizes[1]);
- geometry->defines[BLOCK_SIZE_i]
+ geometry->defines[ERASE_SIZE_i]
= TEST_LIT(sizes[2]);
} else if (count >= 2) {
geometry->defines[PROG_SIZE_i]
= TEST_LIT(sizes[0]);
- geometry->defines[BLOCK_SIZE_i]
+ geometry->defines[ERASE_SIZE_i]
= TEST_LIT(sizes[1]);
} else {
- geometry->defines[BLOCK_SIZE_i]
+ geometry->defines[ERASE_SIZE_i]
= TEST_LIT(sizes[0]);
}
if (count >= 4) {
- geometry->defines[BLOCK_COUNT_i]
+ geometry->defines[ERASE_COUNT_i]
= TEST_LIT(sizes[3]);
}
optarg = s;
diff --git a/runners/test_runner.h b/runners/test_runner.h
index e30d492..4be72e4 100644
--- a/runners/test_runner.h
+++ b/runners/test_runner.h
@@ -82,19 +82,23 @@ intmax_t test_define(size_t define);
#define READ_SIZE_i 0
#define PROG_SIZE_i 1
-#define BLOCK_SIZE_i 2
-#define BLOCK_COUNT_i 3
-#define CACHE_SIZE_i 4
-#define LOOKAHEAD_SIZE_i 5
-#define BLOCK_CYCLES_i 6
-#define ERASE_VALUE_i 7
-#define ERASE_CYCLES_i 8
-#define BADBLOCK_BEHAVIOR_i 9
-#define POWERLOSS_BEHAVIOR_i 10
-#define DISK_VERSION_i 11
+#define ERASE_SIZE_i 2
+#define ERASE_COUNT_i 3
+#define BLOCK_SIZE_i 4
+#define BLOCK_COUNT_i 5
+#define CACHE_SIZE_i 6
+#define LOOKAHEAD_SIZE_i 7
+#define BLOCK_CYCLES_i 8
+#define ERASE_VALUE_i 9
+#define ERASE_CYCLES_i 10
+#define BADBLOCK_BEHAVIOR_i 11
+#define POWERLOSS_BEHAVIOR_i 12
+#define DISK_VERSION_i 13
#define READ_SIZE TEST_DEFINE(READ_SIZE_i)
#define PROG_SIZE TEST_DEFINE(PROG_SIZE_i)
+#define ERASE_SIZE TEST_DEFINE(ERASE_SIZE_i)
+#define ERASE_COUNT TEST_DEFINE(ERASE_COUNT_i)
#define BLOCK_SIZE TEST_DEFINE(BLOCK_SIZE_i)
#define BLOCK_COUNT TEST_DEFINE(BLOCK_COUNT_i)
#define CACHE_SIZE TEST_DEFINE(CACHE_SIZE_i)
@@ -108,9 +112,11 @@ intmax_t test_define(size_t define);
#define TEST_IMPLICIT_DEFINES \
TEST_DEF(READ_SIZE, PROG_SIZE) \
- TEST_DEF(PROG_SIZE, BLOCK_SIZE) \
- TEST_DEF(BLOCK_SIZE, 0) \
- TEST_DEF(BLOCK_COUNT, (1024*1024)/BLOCK_SIZE) \
+ TEST_DEF(PROG_SIZE, ERASE_SIZE) \
+ TEST_DEF(ERASE_SIZE, 0) \
+ TEST_DEF(ERASE_COUNT, (1024*1024)/ERASE_SIZE) \
+ TEST_DEF(BLOCK_SIZE, ERASE_SIZE) \
+ TEST_DEF(BLOCK_COUNT, ERASE_COUNT/lfs_max(BLOCK_SIZE/ERASE_SIZE,1)) \
TEST_DEF(CACHE_SIZE, lfs_max(64,lfs_max(READ_SIZE,PROG_SIZE))) \
TEST_DEF(LOOKAHEAD_SIZE, 16) \
TEST_DEF(BLOCK_CYCLES, -1) \
@@ -120,8 +126,8 @@ intmax_t test_define(size_t define);
TEST_DEF(POWERLOSS_BEHAVIOR, LFS_EMUBD_POWERLOSS_NOOP) \
TEST_DEF(DISK_VERSION, 0)
-#define TEST_IMPLICIT_DEFINE_COUNT 12
#define TEST_GEOMETRY_DEFINE_COUNT 4
+#define TEST_IMPLICIT_DEFINE_COUNT 14
#endif
diff --git a/tests/test_alloc.toml b/tests/test_alloc.toml
index 205efbb..916fc2a 100644
--- a/tests/test_alloc.toml
+++ b/tests/test_alloc.toml
@@ -460,8 +460,8 @@ code = '''
# chained dir exhaustion test
[cases.test_alloc_chained_dir_exhaustion]
-if = 'BLOCK_SIZE == 512'
-defines.BLOCK_COUNT = 1024
+if = 'ERASE_SIZE == 512'
+defines.ERASE_COUNT = 1024
code = '''
lfs_t lfs;
lfs_format(&lfs, cfg) => 0;
@@ -538,8 +538,8 @@ code = '''
# split dir test
[cases.test_alloc_split_dir]
-if = 'BLOCK_SIZE == 512'
-defines.BLOCK_COUNT = 1024
+if = 'ERASE_SIZE == 512'
+defines.ERASE_COUNT = 1024
code = '''
lfs_t lfs;
lfs_format(&lfs, cfg) => 0;
@@ -587,8 +587,8 @@ code = '''
# outdated lookahead test
[cases.test_alloc_outdated_lookahead]
-if = 'BLOCK_SIZE == 512'
-defines.BLOCK_COUNT = 1024
+if = 'ERASE_SIZE == 512'
+defines.ERASE_COUNT = 1024
code = '''
lfs_t lfs;
lfs_format(&lfs, cfg) => 0;
@@ -655,8 +655,8 @@ code = '''
# outdated lookahead and split dir test
[cases.test_alloc_outdated_lookahead_split_dir]
-if = 'BLOCK_SIZE == 512'
-defines.BLOCK_COUNT = 1024
+if = 'ERASE_SIZE == 512'
+defines.ERASE_COUNT = 1024
code = '''
lfs_t lfs;
lfs_format(&lfs, cfg) => 0;
diff --git a/tests/test_badblocks.toml b/tests/test_badblocks.toml
index b50b393..04ed73f 100644
--- a/tests/test_badblocks.toml
+++ b/tests/test_badblocks.toml
@@ -2,7 +2,7 @@
if = '(int32_t)BLOCK_CYCLES == -1'
[cases.test_badblocks_single]
-defines.BLOCK_COUNT = 256 # small bd so test runs faster
+defines.ERASE_COUNT = 256 # small bd so test runs faster
defines.ERASE_CYCLES = 0xffffffff
defines.ERASE_VALUE = [0x00, 0xff, -1]
defines.BADBLOCK_BEHAVIOR = [
@@ -82,7 +82,7 @@ code = '''
'''
[cases.test_badblocks_region_corruption] # (causes cascading failures)
-defines.BLOCK_COUNT = 256 # small bd so test runs faster
+defines.ERASE_COUNT = 256 # small bd so test runs faster
defines.ERASE_CYCLES = 0xffffffff
defines.ERASE_VALUE = [0x00, 0xff, -1]
defines.BADBLOCK_BEHAVIOR = [
@@ -161,7 +161,7 @@ code = '''
'''
[cases.test_badblocks_alternating_corruption] # (causes cascading failures)
-defines.BLOCK_COUNT = 256 # small bd so test runs faster
+defines.ERASE_COUNT = 256 # small bd so test runs faster
defines.ERASE_CYCLES = 0xffffffff
defines.ERASE_VALUE = [0x00, 0xff, -1]
defines.BADBLOCK_BEHAVIOR = [
diff --git a/tests/test_exhaustion.toml b/tests/test_exhaustion.toml
index 2cf6aed..273dd98 100644
--- a/tests/test_exhaustion.toml
+++ b/tests/test_exhaustion.toml
@@ -1,7 +1,7 @@
# test running a filesystem to exhaustion
[cases.test_exhaustion_normal]
defines.ERASE_CYCLES = 10
-defines.BLOCK_COUNT = 256 # small bd so test runs faster
+defines.ERASE_COUNT = 256 # small bd so test runs faster
defines.BLOCK_CYCLES = 'ERASE_CYCLES / 2'
defines.BADBLOCK_BEHAVIOR = [
'LFS_EMUBD_BADBLOCK_PROGERROR',
@@ -94,7 +94,7 @@ exhausted:
# which also requires expanding superblocks
[cases.test_exhaustion_superblocks]
defines.ERASE_CYCLES = 10
-defines.BLOCK_COUNT = 256 # small bd so test runs faster
+defines.ERASE_COUNT = 256 # small bd so test runs faster
defines.BLOCK_CYCLES = 'ERASE_CYCLES / 2'
defines.BADBLOCK_BEHAVIOR = [
'LFS_EMUBD_BADBLOCK_PROGERROR',
@@ -188,7 +188,7 @@ exhausted:
# wear-level test running a filesystem to exhaustion
[cases.test_exhuastion_wear_leveling]
defines.ERASE_CYCLES = 20
-defines.BLOCK_COUNT = 256 # small bd so test runs faster
+defines.ERASE_COUNT = 256 # small bd so test runs faster
defines.BLOCK_CYCLES = 'ERASE_CYCLES / 2'
defines.FILES = 10
code = '''
@@ -288,7 +288,7 @@ exhausted:
# wear-level test + expanding superblock
[cases.test_exhaustion_wear_leveling_superblocks]
defines.ERASE_CYCLES = 20
-defines.BLOCK_COUNT = 256 # small bd so test runs faster
+defines.ERASE_COUNT = 256 # small bd so test runs faster
defines.BLOCK_CYCLES = 'ERASE_CYCLES / 2'
defines.FILES = 10
code = '''
@@ -385,7 +385,7 @@ exhausted:
# test that we wear blocks roughly evenly
[cases.test_exhaustion_wear_distribution]
defines.ERASE_CYCLES = 0xffffffff
-defines.BLOCK_COUNT = 256 # small bd so test runs faster
+defines.ERASE_COUNT = 256 # small bd so test runs faster
defines.BLOCK_CYCLES = [5, 4, 3, 2, 1]
defines.CYCLES = 100
defines.FILES = 10