[PATCH] f2fs: use EINVAL for invalid superblock

From: Icenowy Zheng
Date: Wed Jul 24 2019 - 09:08:13 EST

The kernel mount_block_root() function expects -EACESS or -EINVAL for a
unmountable filesystem when trying to mount the root with different
filesystem types.

However, in 5.3-rc1 the behavior when F2FS code cannot find valid block
changed to return -EFSCORRUPTED(-EUCLEAN), and this error code makes
mount_block_root() fail when trying to probe F2FS. As invalid
superblocks mean the filesystem cannot be recognized as F2FS (it might
be another FS), returning -EINVAL seems more reasonable, and other
filesystems also do this.

Change back the return value to -EINVAL when no valid superblocks are

Fixes: 10f966bbf521 ("f2fs: use generic EFSBADCRC/EFSCORRUPTED")
Signed-off-by: Icenowy Zheng <icenowy@xxxxxxx>
This commit fixes a regression introduced in v5.3-rc1, which leads to
btrfs / cannot be mounted if no initrd is used and both f2fs and btrfs
are built-in.

fs/f2fs/super.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c
index 6de6cda44031..949309b9f1b8 100644
--- a/fs/f2fs/super.c
+++ b/fs/f2fs/super.c
@@ -2873,7 +2873,7 @@ static int read_raw_super_block(struct f2fs_sb_info *sbi,
if (sanity_check_raw_super(sbi, bh)) {
f2fs_err(sbi, "Can't find valid F2FS filesystem in %dth superblock",
block + 1);
+ err = -EINVAL;