Compare commits

..

1 Commits

Author SHA1 Message Date
Christopher Haster
2b804537b0 Moved sanity check in lfs_format after compaction
After a bit of tweaking in 9dde5c7 to write out all superblocks
during lfs_format, additional writes were added after the sanity
checking normally done at the end.

This turned out to be a problem when porting littlefs, as it makes it
easy for addressing issues to not get caught during lfs_format.

Found by marekr, tristanclare94, and mjs513
2020-12-22 11:47:48 -06:00

20
lfs.c
View File

@@ -425,8 +425,7 @@ static inline void lfs_superblock_tole32(lfs_superblock_t *superblock) {
superblock->attr_max = lfs_tole32(superblock->attr_max); superblock->attr_max = lfs_tole32(superblock->attr_max);
} }
#ifndef LFS_NO_ASSERT static inline bool lfs_mlist_isopen(struct lfs_mlist *head,
static bool lfs_mlist_isopen(struct lfs_mlist *head,
struct lfs_mlist *node) { struct lfs_mlist *node) {
for (struct lfs_mlist **p = &head; *p; p = &(*p)->next) { for (struct lfs_mlist **p = &head; *p; p = &(*p)->next) {
if (*p == (struct lfs_mlist*)node) { if (*p == (struct lfs_mlist*)node) {
@@ -436,9 +435,8 @@ static bool lfs_mlist_isopen(struct lfs_mlist *head,
return false; return false;
} }
#endif
static void lfs_mlist_remove(lfs_t *lfs, struct lfs_mlist *mlist) { static inline void lfs_mlist_remove(lfs_t *lfs, struct lfs_mlist *mlist) {
for (struct lfs_mlist **p = &lfs->mlist; *p; p = &(*p)->next) { for (struct lfs_mlist **p = &lfs->mlist; *p; p = &(*p)->next) {
if (*p == mlist) { if (*p == mlist) {
*p = (*p)->next; *p = (*p)->next;
@@ -447,7 +445,7 @@ static void lfs_mlist_remove(lfs_t *lfs, struct lfs_mlist *mlist) {
} }
} }
static void lfs_mlist_append(lfs_t *lfs, struct lfs_mlist *mlist) { static inline void lfs_mlist_append(lfs_t *lfs, struct lfs_mlist *mlist) {
mlist->next = lfs->mlist; mlist->next = lfs->mlist;
lfs->mlist = mlist; lfs->mlist = mlist;
} }
@@ -3618,12 +3616,6 @@ static int lfs_rawformat(lfs_t *lfs, const struct lfs_config *cfg) {
goto cleanup; goto cleanup;
} }
// sanity check that fetch works
err = lfs_dir_fetch(lfs, &root, (const lfs_block_t[2]){0, 1});
if (err) {
goto cleanup;
}
// force compaction to prevent accidentally mounting any // force compaction to prevent accidentally mounting any
// older version of littlefs that may live on disk // older version of littlefs that may live on disk
root.erased = false; root.erased = false;
@@ -3631,6 +3623,12 @@ static int lfs_rawformat(lfs_t *lfs, const struct lfs_config *cfg) {
if (err) { if (err) {
goto cleanup; goto cleanup;
} }
// sanity check that fetch works
err = lfs_dir_fetch(lfs, &root, (const lfs_block_t[2]){0, 1});
if (err) {
goto cleanup;
}
} }
cleanup: cleanup: