Fixed issue in emubd where noop erases start out-of-sync with disk
Because reproducibility is extremely important, emubd always zeros blocks on the first erase, even when erase_value=-1. Well, at least it should be. We were correctly zeroing the blocks in RAM, but if erase_value=-1 we were leaving the disk unzeroed, causing the disk to fall out of sync. Fixed by zeroing disk in lfs_emubd_createcfg, even if erase_value=-1. Also I went ahead and dropped the bd->disk->scratch block. We're already allocating RAM-backed blocks on erase anyways, so keeping scratch around doesn't really gain us anything anymore. Now there is just a temporary allocation in lfs_emubd_createcfg to zero the disk efficiently during initialization.
This commit is contained in:
+2
-4
@@ -67,9 +67,8 @@ typedef int64_t lfs_emubd_ssleep_t;
|
||||
|
||||
// emubd config, this is required for testing
|
||||
struct lfs_emubd_config {
|
||||
// 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.
|
||||
// 8-bit erase value to use for simulating erases. -1 simulates a noop
|
||||
// erase, which is faster than simulating a fixed erase value.
|
||||
int32_t erase_value;
|
||||
|
||||
// Number of erase cycles before a block becomes "bad". The exact behavior
|
||||
@@ -127,7 +126,6 @@ typedef struct lfs_emubd_block {
|
||||
typedef struct lfs_emubd_disk {
|
||||
uint32_t rc;
|
||||
int fd;
|
||||
uint8_t *scratch;
|
||||
} lfs_emubd_disk_t;
|
||||
|
||||
// emubd state
|
||||
|
||||
Reference in New Issue
Block a user