aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJaegeuk Kim <jaegeuk@kernel.org>2015-12-16 17:43:34 -0800
committerGreg Wallace <greg@gregtwallace.com>2016-01-19 22:02:21 -0500
commit8c04142bab05b5c81e24fb07c8c3e1cd1cb9c56b (patch)
tree21e432699440024b4263e9497b7fa3f88c540123
parent9b8535ccf88731231f31a1d9465feb1db76b93a1 (diff)
downloadandroid_external_f2fs-tools-8c04142bab05b5c81e24fb07c8c3e1cd1cb9c56b.tar.gz
android_external_f2fs-tools-8c04142bab05b5c81e24fb07c8c3e1cd1cb9c56b.tar.bz2
android_external_f2fs-tools-8c04142bab05b5c81e24fb07c8c3e1cd1cb9c56b.zip
defrag.f2fs: eliminate unexpected journal entries
When moving data or node blocks, it changes current segment information dynamtically. Meanwhile, its journal entry space is recovered by old stale data. This patch makes sure that its journal space is zeroed out. Change-Id: I125b334ed6f0392448ce4b7722cc284c1580b4aa Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
-rw-r--r--fsck/defrag.c1
-rw-r--r--fsck/fsck.h1
-rw-r--r--fsck/mount.c8
3 files changed, 10 insertions, 0 deletions
diff --git a/fsck/defrag.c b/fsck/defrag.c
index 7ca7260..7abc0bf 100644
--- a/fsck/defrag.c
+++ b/fsck/defrag.c
@@ -90,6 +90,7 @@ int f2fs_defragment(struct f2fs_sb_info *sbi, u64 from, u64 len, u64 to, int lef
/* update curseg info; can update sit->types */
move_curseg_info(sbi, to);
+ zero_journal_entries(sbi);
write_curseg_info(sbi);
/* flush dirty sit entries */
diff --git a/fsck/fsck.h b/fsck/fsck.h
index 1464146..3870948 100644
--- a/fsck/fsck.h
+++ b/fsck/fsck.h
@@ -135,6 +135,7 @@ extern int f2fs_do_mount(struct f2fs_sb_info *);
extern void f2fs_do_umount(struct f2fs_sb_info *);
extern void flush_journal_entries(struct f2fs_sb_info *);
+extern void zero_journal_entries(struct f2fs_sb_info *);
extern void flush_sit_entries(struct f2fs_sb_info *);
extern void move_curseg_info(struct f2fs_sb_info *, u64);
extern void write_curseg_info(struct f2fs_sb_info *);
diff --git a/fsck/mount.c b/fsck/mount.c
index 8418dcc..735ed90 100644
--- a/fsck/mount.c
+++ b/fsck/mount.c
@@ -1446,6 +1446,14 @@ void move_curseg_info(struct f2fs_sb_info *sbi, u64 from)
}
}
+void zero_journal_entries(struct f2fs_sb_info *sbi)
+{
+ int i;
+
+ for (i = 0; i < NO_CHECK_TYPE; i++)
+ CURSEG_I(sbi, i)->sum_blk->n_nats = 0;
+}
+
void write_curseg_info(struct f2fs_sb_info *sbi)
{
struct f2fs_checkpoint *cp = F2FS_CKPT(sbi);