diff --git a/bd/lfs_emubd.c b/bd/lfs_emubd.c index 5ab8b082..de3075ec 100644 --- a/bd/lfs_emubd.c +++ b/bd/lfs_emubd.c @@ -220,7 +220,9 @@ 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(block < bd->cfg->erase_count); + if (block >= bd->cfg->erase_count) { + return LFS_ERR_INVAL; + } LFS_ASSERT(off % bd->cfg->read_size == 0); LFS_ASSERT(size % bd->cfg->read_size == 0); LFS_ASSERT(off+size <= bd->cfg->erase_size); diff --git a/bd/lfs_filebd.c b/bd/lfs_filebd.c index 4ff25d44..5f874531 100644 --- a/bd/lfs_filebd.c +++ b/bd/lfs_filebd.c @@ -70,7 +70,9 @@ 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 < bd->cfg->erase_count); + if (block >= bd->cfg->erase_count) { + return LFS_ERR_INVAL; + } LFS_ASSERT(off % bd->cfg->read_size == 0); LFS_ASSERT(size % bd->cfg->read_size == 0); LFS_ASSERT(off+size <= bd->cfg->erase_size); diff --git a/bd/lfs_rambd.c b/bd/lfs_rambd.c index a6a05727..1b29e336 100644 --- a/bd/lfs_rambd.c +++ b/bd/lfs_rambd.c @@ -60,7 +60,9 @@ 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 < bd->cfg->erase_count); + if (block >= bd->cfg->erase_count) { + return LFS_ERR_INVAL; + } LFS_ASSERT(off % bd->cfg->read_size == 0); LFS_ASSERT(size % bd->cfg->read_size == 0); LFS_ASSERT(off+size <= bd->cfg->erase_size); diff --git a/benches/bench_superblock.toml b/benches/bench_superblock.toml index 37659d47..ff013700 100644 --- a/benches/bench_superblock.toml +++ b/benches/bench_superblock.toml @@ -1,4 +1,15 @@ -[cases.bench_superblocks_found] +[cases.bench_superblocks_format] +code = ''' + lfs_t lfs; + + BENCH_START(); + lfs_format(&lfs, cfg) => 0; + BENCH_STOP(); +''' + +[cases.bench_superblocks_mount] +defines.KNOWN_BLOCK_SIZE = [true, false] +defines.KNOWN_BLOCK_COUNT = [true, false] # support benchmarking with files defines.N = [0, 1024] defines.FILE_SIZE = 8 @@ -28,6 +39,18 @@ code = ''' } lfs_unmount(&lfs) => 0; + if (KNOWN_BLOCK_SIZE) { + cfg->block_size = BLOCK_SIZE; + } else { + cfg->block_size = 0; + } + + if (KNOWN_BLOCK_COUNT) { + cfg->block_count = BLOCK_COUNT; + } else { + cfg->block_count = 0; + } + BENCH_START(); lfs_mount(&lfs, cfg) => 0; BENCH_STOP(); @@ -35,22 +58,27 @@ code = ''' lfs_unmount(&lfs) => 0; ''' -[cases.bench_superblocks_missing] +[cases.bench_superblocks_mount_missing] +defines.KNOWN_BLOCK_SIZE = [true, false] +defines.KNOWN_BLOCK_COUNT = [true, false] code = ''' lfs_t lfs; - BENCH_START(); - int err = lfs_mount(&lfs, cfg); - assert(err != 0); - BENCH_STOP(); -''' + if (KNOWN_BLOCK_SIZE) { + cfg->block_size = BLOCK_SIZE; + } else { + cfg->block_size = 0; + } -[cases.bench_superblocks_format] -code = ''' - lfs_t lfs; + if (KNOWN_BLOCK_COUNT) { + cfg->block_count = BLOCK_COUNT; + } else { + cfg->block_count = 0; + } BENCH_START(); - lfs_format(&lfs, cfg) => 0; + int err = lfs_mount(&lfs, cfg); + assert(err != 0); BENCH_STOP(); '''