• Chao Yu's avatar
    f2fs: fix to check layout on last valid checkpoint park · 5dae2d39
    Chao Yu authored
    As Ju Hyung reported:
    
    "
    I was semi-forced today to use the new kernel and test f2fs.
    
    My Ubuntu initramfs got a bit wonky and I had to boot into live CD and
    fix some stuffs. The live CD was using 4.15 kernel, and just mounting
    the f2fs partition there corrupted f2fs and my 4.19(with 5.1-rc1-4.19
    f2fs-stable merged) refused to mount with "SIT is corrupted node"
    message.
    
    I used the latest f2fs-tools sent by Chao including "fsck.f2fs: fix to
    repair cp_loads blocks at correct position"
    
    It spit out 140M worth of output, but at least I didn't have to run it
    twice. Everything returned "Ok" in the 2nd run.
    The new log is at
    http://arter97.com/f2fs/final
    
    After fixing the image, I used my 4.19 kernel with 5.2-rc1-4.19
    f2fs-stable merged and it mounted.
    
    But, I got this:
    [    1.047791] F2FS-fs (nvme0n1p3): layout of large_nat_bitmap is
    deprecated, run fsck to repair, chksum_offset: 4092
    [    1.081307] F2FS-fs (nvme0n1p3): Found nat_bits in checkpoint
    [    1.161520] F2FS-fs (nvme0n1p3): recover fsync data on readonly fs
    [    1.162418] F2FS-fs (nvme0n1p3): Mounted with checkpoint version = 761c7e00
    
    But after doing a reboot, the message is gone:
    [    1.098423] F2FS-fs (nvme0n1p3): Found nat_bits in checkpoint
    [    1.177771] F2FS-fs (nvme0n1p3): recover fsync data on readonly fs
    [    1.178365] F2FS-fs (nvme0n1p3): Mounted with checkpoint version = 761c7eda
    
    I'm not exactly sure why the kernel detected that I'm still using the
    old layout on the first boot. Maybe fsck didn't fix it properly, or
    the check from the kernel is improper.
    "
    
    Although we have rebuild the old deprecated checkpoint with new layout
    during repair, we only repair last checkpoint park, the other old one is
    remained.
    
    Once the image was mounted, we will 1) sanity check layout and 2) decide
    which checkpoint park to use according to cp_ver. So that we will print
    reported message unnecessarily at step 1), to avoid it, we simply move
    layout check into f2fs_sanity_check_ckpt() after step 2).
    Reported-by: default avatarPark Ju Hyung <qkrwngud825@gmail.com>
    Signed-off-by: default avatarChao Yu <yuchao0@huawei.com>
    Signed-off-by: default avatarJaegeuk Kim <jaegeuk@kernel.org>
    5dae2d39
super.c 92.9 KB