Go to file
Chao Yu a423b5f91e f2fs-tools: relocate chksum_offset for large_nat_bitmap feature
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>
2019-05-20 17:30:16 -07:00
fsck f2fs-tools: relocate chksum_offset for large_nat_bitmap feature 2019-05-20 17:30:16 -07:00
include f2fs-tools: relocate chksum_offset for large_nat_bitmap feature 2019-05-20 17:30:16 -07:00
lib f2fs-tools: allow unfixed f2fs_checkpoint.checksum_offset 2019-05-20 17:29:55 -07:00
m4 mkfs: Initial commit for patch v2 series 2012-11-26 19:45:59 +09:00
man mkfs.f2fs: add root_owner to give uid/gid 2018-08-27 23:49:26 -07:00
mkfs f2fs-tools: relocate chksum_offset for large_nat_bitmap feature 2019-05-20 17:30:16 -07:00
scripts script: add simple test script 2016-04-18 21:11:26 -04:00
tools f2fs_io: exit if system(3) is failed 2019-03-26 11:25:11 -07:00
.gitignore f2fs-tools: Add f2fs_io to .gitignore 2019-03-23 19:00:10 +09:00
AUTHORS mkfs: Initial commit for patch v2 series 2012-11-26 19:45:59 +09:00
autogen.sh defrag.f2fs: introduce defragmentation tool 2015-12-11 15:58:50 -08:00
ChangeLog f2fs-tools: add fsck.f2fs and dump.f2fs 2013-07-04 23:15:25 +09:00
configure.ac tools: add f2fs_io 2019-01-03 20:38:34 -08:00
COPYING License tweak: LGPL v2.1 vs LGPL v2 2014-06-12 16:52:59 +09:00
Makefile.am f2fs-tools: add f2fstat to print f2fs's status in sec 2014-01-14 17:48:35 +09:00
README README: revisit README to fix typos and so on 2016-11-14 16:31:38 -08:00
VERSION f2fs-tools: release 1.12.0 2018-11-21 11:39:05 -08:00
VERSIONING doc: add versioning rule 2018-11-21 11:38:23 -08:00

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.