• C
    f2fs: relocate chksum_offset for large_nat_bitmap feature · b471eb99
    Chao Yu 提交于
    For large_nat_bitmap feature, there is a design flaw:
    
    Previous:
    
    struct f2fs_checkpoint layout:
    +--------------------------+  0x0000
    | checkpoint_ver           |
    | ......                   |
    | checksum_offset          |------+
    | ......                   |      |
    | sit_nat_version_bitmap[] |<-----|-------+
    | ......                   |      |       |
    | checksum_value           |<-----+       |
    +--------------------------+  0x1000      |
    |                          |      nat_bitmap + sit_bitmap
    | payload blocks           |              |
    |                          |              |
    +--------------------------|<-------------+
    
    Obviously, if nat_bitmap size + sit_bitmap size is larger than
    MAX_BITMAP_SIZE_IN_CKPT, nat_bitmap or sit_bitmap may overlap
    checkpoint checksum's position, once checkpoint() is triggered
    from kernel, nat or sit bitmap will be damaged by checksum field.
    
    In order to fix this, let's relocate checksum_value's position
    to the head of sit_nat_version_bitmap as below, then nat/sit
    bitmap and chksum value update will become safe.
    
    After:
    
    struct f2fs_checkpoint layout:
    +--------------------------+  0x0000
    | checkpoint_ver           |
    | ......                   |
    | checksum_offset          |------+
    | ......                   |      |
    | sit_nat_version_bitmap[] |<-----+
    | ......                   |<-------------+
    |                          |              |
    +--------------------------+  0x1000      |
    |                          |      nat_bitmap + sit_bitmap
    | payload blocks           |              |
    |                          |              |
    +--------------------------|<-------------+
    
    Related report and discussion:
    
    https://sourceforge.net/p/linux-f2fs/mailman/message/36642346/Reported-by: NPark Ju Hyung <qkrwngud825@gmail.com>
    Signed-off-by: NChao Yu <yuchao0@huawei.com>
    Signed-off-by: NJaegeuk Kim <jaegeuk@kernel.org>
    b471eb99
f2fs.h 115.8 KB