From a9a61a3e7860deaabc8645cbf586ad9ce85de3bc Mon Sep 17 00:00:00 2001 From: Christopher Haster Date: Tue, 28 May 2019 18:16:51 -0500 Subject: [PATCH] Added redundant compaction to lfs_format/lfs_migrate This ensures that both blocks in the superblock pair are written with the superblock info. While this does use an additional erase cycle, it prevents older versions of littlefs from accidentally being picked up in the case that the disk is mounted on a system that doesn't support the newer version. This does bring back the risk of picking up old littlefs versions on a disk that has been formatted with a filesystem that doesn't use block 2 (such as FAT), but this risk already exists, and moving between versions of littlefs is more likely with the recent v1 -> v2 update. Suggested by rojer --- lfs.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/lfs.c b/lfs.c index 7bd63e5..8ebf4ed 100644 --- a/lfs.c +++ b/lfs.c @@ -3338,6 +3338,14 @@ int lfs_format(lfs_t *lfs, const struct lfs_config *cfg) { if (err) { goto cleanup; } + + // force compaction to prevent accidentally mounting any + // older version of littlefs that may live on disk + root.erased = false; + err = lfs_dir_commit(lfs, &root, NULL, 0); + if (err) { + goto cleanup; + } } cleanup: @@ -4447,6 +4455,13 @@ int lfs_migrate(lfs_t *lfs, const struct lfs_config *cfg) { if (err) { goto cleanup; } + + // force compaction to prevent accidentally mounting v1 + dir2.erased = false; + err = lfs_dir_commit(lfs, &dir2, NULL, 0); + if (err) { + goto cleanup; + } } cleanup: