From 4db96d4d44cf4d3eb6d0731a024e6620028c64ba Mon Sep 17 00:00:00 2001 From: Christopher Haster Date: Mon, 13 Aug 2018 14:20:40 -0500 Subject: [PATCH] Changed unwritable superblock to ENOSPC for consistency While ECORRUPT is not a wrong error code, it doesn't match other instances of hitting a corrupt block during write. During writes, if blocks are detected as corrupt their data is evicted and moved to a new clean block. This means that at the end of a disk's lifetime, exhaustion errors will be reported as ENOSPC when littlefs can't find any new block to store the data. This has the benefit of matching behaviour when a new file is written and no more blocks can be found, due to either a small disk or corrupted blocks on disk. To littlefs it's like the disk shrinks in size over time. --- lfs.c | 2 +- tests/test_format.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lfs.c b/lfs.c index 81a19f6..1649ae5 100644 --- a/lfs.c +++ b/lfs.c @@ -1237,7 +1237,7 @@ relocate: // can't relocate superblock, filesystem is now frozen if (lfs_pair_cmp(oldpair, (const lfs_block_t[2]){0, 1}) == 0) { LFS_WARN("Superblock %"PRIu32" has become unwritable", oldpair[1]); - return LFS_ERR_CORRUPT; + return LFS_ERR_NOSPC; } // relocate half of pair diff --git a/tests/test_format.sh b/tests/test_format.sh index 06438bc..d885f83 100755 --- a/tests/test_format.sh +++ b/tests/test_format.sh @@ -22,7 +22,7 @@ echo "--- Invalid superblocks ---" ln -f -s /dev/zero blocks/0 ln -f -s /dev/zero blocks/1 tests/test.py << TEST - lfs_format(&lfs, &cfg) => LFS_ERR_CORRUPT; + lfs_format(&lfs, &cfg) => LFS_ERR_NOSPC; TEST rm blocks/0 blocks/1