mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/jaegeuk/f2fs-tools.git
synced 2024-11-23 17:53:39 +08:00
a423b5f91e
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/ In addition, during writing checkpoint, if large_nat_bitmap feature is enabled, we need to set CP_LARGE_NAT_BITMAP_FLAG flag in checkpoint. Reported-by: Park Ju Hyung <qkrwngud825@gmail.com> Signed-off-by: Chao Yu <yuchao0@huawei.com> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org> |
||
---|---|---|
fsck | ||
include | ||
lib | ||
m4 | ||
man | ||
mkfs | ||
scripts | ||
tools | ||
.gitignore | ||
AUTHORS | ||
autogen.sh | ||
ChangeLog | ||
configure.ac | ||
COPYING | ||
Makefile.am | ||
README | ||
VERSION | ||
VERSIONING |
F2FS format utilility --------------------- To use f2fs filesystem, you should format the storage partition with this utilility. Otherwise, you cannot mount f2fs. Before compilation ------------------ You should install the following packages. - libuuid-devel or uuid-dev - pkg-config - autoconf - libtool - libselinux1-dev Initial compilation ------------------- Before compilation initially, autoconf/automake tools should be run. # ./autogen.sh How to compile -------------- # ./configure # make # make install How to cross-compile (e.g., for ARM) ------------------------------------ 1. Add the below line into mkfs/Makefile.am: mkfs_f2fs_LDFLAGS = -all-static 2. Add the below line into fsck/Makefile.am: fsck_f2fs_LDFLAGS = -all-static 3. then, do: # LDFLAGS=--static ./configure \ --host=arm-none-linux-gnueabi --target=arm-none-linux-gnueabi # make How to run by default --------------------- $ mkfs.f2fs -l [LABEL] $DEV For more mkfs options, see man page.