diff options
author | Christopher Haster <geky@geky.net> | 2022-11-12 00:05:34 +0300 |
---|---|---|
committer | Christopher Haster <geky@geky.net> | 2023-09-12 08:39:09 +0300 |
commit | 027331b2f094d1327b23c25054ddaae652d30ea2 (patch) | |
tree | 35c458422c98481554dc7ed54e9327dc6e0bd302 | |
parent | 9c23329dd7daae78c3515eca8940668cfe6074dc (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.c | 105 | ||||
-rw-r--r-- | bd/lfs_emubd.h | 18 | ||||
-rw-r--r-- | bd/lfs_filebd.c | 43 | ||||
-rw-r--r-- | bd/lfs_filebd.h | 21 | ||||
-rw-r--r-- | bd/lfs_rambd.c | 65 | ||||
-rw-r--r-- | bd/lfs_rambd.h | 19 | ||||
-rw-r--r-- | runners/bench_runner.c | 28 | ||||
-rw-r--r-- | runners/bench_runner.h | 32 | ||||
-rw-r--r-- | runners/test_runner.c | 52 | ||||
-rw-r--r-- | runners/test_runner.h | 34 | ||||
-rw-r--r-- | tests/test_alloc.toml | 16 | ||||
-rw-r--r-- | tests/test_badblocks.toml | 6 | ||||
-rw-r--r-- | tests/test_exhaustion.toml | 10 |
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 |