Bläddra i källkod

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.
Christopher Haster 7 år sedan
förälder
incheckning
4db96d4d44
2 ändrade filer med 2 tillägg och 2 borttagningar
  1. 1 1
      lfs.c
  2. 1 1
      tests/test_format.sh

+ 1 - 1
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

+ 1 - 1
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