diff options
author | Christopher Haster <chaster@utexas.edu> | 2019-05-29 02:16:51 +0300 |
---|---|---|
committer | Christopher Haster <chaster@utexas.edu> | 2019-07-01 23:11:38 +0300 |
commit | a9a61a3e7860deaabc8645cbf586ad9ce85de3bc (patch) | |
tree | b8565a91de61e195ef37b21526a0b01dccd1c989 | |
parent | 36973d8fd56c3bf6bc0002060a45ff2c3c2b48d5 (diff) |
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
-rw-r--r-- | lfs.c | 15 |
1 files changed, 15 insertions, 0 deletions
@@ -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: |