aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJaegeuk Kim <jaegeuk@kernel.org>2015-09-24 09:45:16 -0700
committerDan Pasanen <dan.pasanen@gmail.com>2015-11-12 09:37:26 -0600
commit1818815c8f606dcd13c6f31a2f45c0e8bc2c807b (patch)
treece681890a183e73f50df987e61528c0e9507c5be
parent8fa1ebacdb2e8dbe205f7a6ed19aaadb9398a3c1 (diff)
downloadandroid_external_f2fs-tools-1818815c8f606dcd13c6f31a2f45c0e8bc2c807b.tar.gz
android_external_f2fs-tools-1818815c8f606dcd13c6f31a2f45c0e8bc2c807b.tar.bz2
android_external_f2fs-tools-1818815c8f606dcd13c6f31a2f45c0e8bc2c807b.zip
fsck.f2fs: check sit types for node or data only
Previously, check_sit_types didn't handle different numbers of active logs and SSR cases. But, it didn't cause any problem since fixing sit types is harmless. Nevertheless, we still don't need to change them all. Change-Id: I7c3e4d354c9f0091f56011978ad7ffd5553f076c Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
-rw-r--r--fsck/fsck.c22
1 files changed, 10 insertions, 12 deletions
diff --git a/fsck/fsck.c b/fsck/fsck.c
index 70efce6..d3b5dd4 100644
--- a/fsck/fsck.c
+++ b/fsck/fsck.c
@@ -18,21 +18,19 @@ static inline int f2fs_set_main_bitmap(struct f2fs_sb_info *sbi, u32 blk,
{
struct f2fs_fsck *fsck = F2FS_FSCK(sbi);
struct seg_entry *se;
+ int fix = 0;
se = get_seg_entry(sbi, GET_SEGNO(sbi, blk));
- if (se->type != type) {
- if (type == CURSEG_WARM_DATA) {
- if (se->type != CURSEG_COLD_DATA) {
- DBG(1, "Wrong segment type [0x%x] %x -> %x",
- GET_SEGNO(sbi, blk), se->type,
- CURSEG_WARM_DATA);
- se->type = CURSEG_WARM_DATA;
- }
- } else {
- DBG(1, "Wrong segment type [0x%x] %x -> %x",
+ if (se->type < 0 || se->type >= NO_CHECK_TYPE)
+ fix = 1;
+ else if (IS_DATASEG(se->type) != IS_DATASEG(type))
+ fix = 1;
+
+ /* just check data and node types */
+ if (fix) {
+ DBG(1, "Wrong segment type [0x%x] %x -> %x",
GET_SEGNO(sbi, blk), se->type, type);
- se->type = type;
- }
+ se->type = type;
}
return f2fs_set_bit(BLKOFF_FROM_MAIN(sbi, blk), fsck->main_area_bitmap);
}