fsck.f2fs: fix to repair ro mounted device w/ -f
authorChao Yu <yuchao0@huawei.com>
Tue, 23 Apr 2019 02:42:20 +0000 (10:42 +0800)
committerJaegeuk Kim <jaegeuk@kernel.org>
Sun, 28 Apr 2019 13:25:58 +0000 (06:25 -0700)
commit264d7da4d68bc6a399a24e690b0f118e59a63aec
tree68380489dfd63ebcaf0fd75b0e87394f7a9897bf
parent98e6f003d46365001328e9bf1ab14af99f5b1b1a
fsck.f2fs: fix to repair ro mounted device w/ -f

As Hagbard Celine reported:

"
Referring to the output from the fsck running against a "ro"
filesystem, especially this line:
Info: Check FS only due to RO

As far as i can tell this says that opposed to other filesystems
running fsck against a "ro" mounted f2fs partition will never fix any
errors.
So I tried running fsck against the same partition mounted "rw":
- mount -o remount,rw /mnt/f2fstest/
- fsck.f2fs  -f /dev/nvme0n1p7
Info: Force to fix corruption
Info: Mounted device!
        Error: Not available on mounted device!

I might be misunderstanding something, but all this tells me that
unless one make a custom initramfs that runs fsck before root is
mounted (something no distributions has, as far as I know), fsck will
never fix an f2fs formatted root partition during boot.
If this is by design and not a bug/unintended behavior, it should be
documented somewhere least more people will experience system crashes
like mine.

All tests above done with kernel 5.0.5 and f2fs-tools 1.12.0 with
"fsck.f2fs: allow to fsck readonly image w/ -f option"-patch by Chao
Yu.
"

We try to make our fsck behavior keeping line with e2fsprogs, but w/
-f option, we can just check a RO mounted device rather repair it, so
let's fix this.

Reported-and-Tested-by: Hagbard Celine <hagbardcelin@gmail.com>
Signed-off-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
fsck/fsck.c
fsck/main.c
include/f2fs_fs.h
lib/libf2fs.c