]> git.ipfire.org Git - thirdparty/e2fsprogs.git/commitdiff
fuse2fs: make filesystem corruption a hard error
authorDarrick J. Wong <djwong@kernel.org>
Wed, 21 May 2025 22:38:49 +0000 (15:38 -0700)
committerTheodore Ts'o <tytso@mit.edu>
Fri, 23 May 2025 13:41:16 +0000 (09:41 -0400)
Change __translate_error so that all the EXT2_*_CORRUPTED codes generate
a hard error returning EUCLEAN which is the same errno that the kernel
uses.

Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Link: https://lore.kernel.org/r/174786677819.1383760.15120011207188940205.stgit@frogsfrogsfrogs
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
misc/fuse2fs.c

index 53e0d15191f158862cf4a85863433f1999ed0366..94e03417169d3efb7effca18486aaaa4be738ce5 100644 (file)
 #define XATTR_SECURITY_PREFIX_LEN (sizeof (XATTR_SECURITY_PREFIX) - 1)
 #endif
 
+#if !defined(EUCLEAN)
+#if !defined(EBADMSG)
+#define EUCLEAN EBADMSG
+#elif !defined(EPROTO)
+#define EUCLEAN EPROTO
+#else
+#define EUCLEAN EIO
+#endif
+#endif /* !defined(EUCLEAN) */
+
 static ext2_filsys global_fs; /* Try not to use this directly */
 
 #define dbg_printf(fuse2fs, format, ...) \
@@ -4298,6 +4308,19 @@ static int __translate_error(ext2_filsys fs, ext2_ino_t ino, errcode_t err,
        case EXT2_ET_UNIMPLEMENTED:
                ret = -EOPNOTSUPP;
                break;
+       case EXT2_ET_DIR_CORRUPTED:
+       case EXT2_ET_CORRUPT_SUPERBLOCK:
+       case EXT2_ET_RESIZE_INODE_CORRUPT:
+       case EXT2_ET_TDB_ERR_CORRUPT:
+       case EXT2_ET_UNDO_FILE_CORRUPT:
+       case EXT2_ET_FILESYSTEM_CORRUPTED:
+       case EXT2_ET_CORRUPT_JOURNAL_SB:
+       case EXT2_ET_INODE_CORRUPTED:
+       case EXT2_ET_EA_INODE_CORRUPTED:
+               /* same errno that linux uses */
+               is_err = 1;
+               ret = -EUCLEAN;
+               break;
        default:
                is_err = 1;
                ret = -EIO;