Commit 699b5233 authored by Chao Yu's avatar Chao Yu
Browse files

BACKPORT: f2fs: fix to avoid migrating empty section



It reports a bug from device w/ zufs:

F2FS-fs (dm-64): Inconsistent segment (173822) type [1, 0] in SSA and
SIT F2FS-fs (dm-64): Stopped filesystem due to reason: 4

Thread A Thread B
- f2fs_expand_inode_data
 - f2fs_allocate_pinning_section
  - f2fs_gc_range
   - do_garbage_collect w/ segno #x
					- writepage
					 - f2fs_allocate_data_block
					  - new_curseg
					   - allocate segno #x

The root cause is: fallocate on pinning file may race w/ block
allocation as above, result in do_garbage_collect() from fallocate() may
migrate segment which is just allocated by a log, the log will update
segment type in its in-memory structure, however GC will get segment
type from on-disk SSA block, once segment type changes by log, we can
detect such inconsistency, then shutdown filesystem.

In this case, on-disk SSA shows type of segno #173822 is 1
(SUM_TYPE_NODE), however segno #173822 was just allocated as data type
segment, so in-memory SIT shows type of segno #173822 is 0
(SUM_TYPE_DATA).

Change as below to fix this issue:
- check whether current section is empty before gc
- add sanity checks on do_garbage_collect() to avoid any race case, result
in migrating segment used by log.
- btw, it fixes misc issue in printed logs: "SSA and SIT" -> "SIT and SSA".

Bug: 456000244
Bug: 441042220
(cherry picked from commit d625a2b0)
[Chao: adjust code to use IS_CURSEC() instead of is_cursec()]
Fixes: 9703d69d ("f2fs: support file pinning for zoned devices")
Cc: Daeho Jeong <daehojeong@google.com>
Signed-off-by: default avatarChao Yu <chao@kernel.org>
Signed-off-by: default avatarJaegeuk Kim <jaegeuk@kernel.org>
Signed-off-by: default avatarChao Yu <chao@kernel.org>
Cherrypick-From: https://android-review.googlesource.com/q/commit:bf3f5d88ab1b003d0eed02fe398164710ba9a1d2
Merged-In: I84b7853130255282540eb8bee79038907f50aded
Change-Id: I84b7853130255282540eb8bee79038907f50aded
parent c134b72c
Loading
Loading
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment