• Jaegeuk Kim's avatar
    Revert "f2fs: clean up w/ sbi->log_sectors_per_block" · 579c7e41
    Jaegeuk Kim authored
    This reverts commit bfd47662.
    
    Shinichiro Kawasaki reported:
    
    When I ran workloads on f2fs using v6.5-rcX with fixes [1][2] and a zoned block
    devices with 4kb logical block size, I observe mount failure as follows. When
    I revert this commit, the failure goes away.
    
    [  167.781975][ T1555] F2FS-fs (dm-0): IO Block Size:        4 KB
    [  167.890728][ T1555] F2FS-fs (dm-0): Found nat_bits in checkpoint
    [  171.482588][ T1555] F2FS-fs (dm-0): Zone without valid block has non-zero write pointer. Reset the write pointer: wp[0x1300,0x8]
    [  171.496000][ T1555] F2FS-fs (dm-0): (0) : Unaligned zone reset attempted (block 280000 + 80000)
    [  171.505037][ T1555] F2FS-fs (dm-0): Discard zone failed:  (errno=-5)
    
    The patch replaced "sbi->log_blocksize - SECTOR_SHIFT" with
    "sbi->log_sectors_per_block". However, I think these two are not equal when the
    device has 4k logical block size. The former uses Linux kernel sector size 512
    byte. The latter use 512b sector size or 4kb sector size depending on the
    device. mkfs.f2fs obtains logical block size via BLKSSZGET ioctl from the device
    and reflects it to the value sbi->log_sector_size_per_block. This causes
    unexpected write pointer calculations in check_zone_write_pointer(). This
    resulted in unexpected zone reset and the mount failure.
    
    [1] https://lkml.kernel.org/linux-f2fs-devel/20230711050101.GA19128@lst.de/
    [2] https://lore.kernel.org/linux-f2fs-devel/20230804091556.2372567-1-shinichiro.kawasaki@wdc.com/
    
    Cc: stable@vger.kernel.org
    Reported-by: default avatarShinichiro Kawasaki <shinichiro.kawasaki@wdc.com>
    Fixes: bfd47662 ("f2fs: clean up w/ sbi->log_sectors_per_block")
    Reviewed-by: default avatarChao Yu <chao@kernel.org>
    Signed-off-by: default avatarJaegeuk Kim <jaegeuk@kernel.org>
    579c7e41
segment.c 138 KB