From: liujinbao1 <[email protected]> When CP has CP_COMPACT_SUM_FLAG set, the nat/sit journal is stored in compact summary blocks at start_sum_block() rather than in the regular summary area. However, rewrite_nat_in_journal() and rewrite_sit_in_journal() only handled CP_UMOUNT_FLAG and the running state, missing the compact summary case.This caused the fault injection to fail.
Fix this by adding the CP_COMPACT_SUM_FLAG check before the existing CP_UMOUNT_FLAG check in both functions, writing the journal to the correct compact summary block location. Test steps: 1. NAT journal injection (nid=4, quota file): inject.f2fs --nat 0 --mb block_addr --nid 4 --val 12345 /dev/block/by-name/userdata Before: blkaddr unchanged (308225) After: blkaddr = 12345 2. SIT journal injection (segno=61075, CURSEG_COLD_DATA): inject.f2fs --sit 0 --blk 0x1e1da00 --mb vblocks --val 123 /dev/block/by-name/userdata Before: vblocks unchanged (0) After: vblocks = 123 Signed-off-by: Sheng Yong <[email protected]> Signed-off-by: liujinbao1 <[email protected]> --- fsck/inject.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/fsck/inject.c b/fsck/inject.c index b00e356..60a2d20 100644 --- a/fsck/inject.c +++ b/fsck/inject.c @@ -675,6 +675,14 @@ static void rewrite_nat_in_journal(struct f2fs_sb_info *sbi, u32 nid, } } + if (is_set_ckpt_flags(cp, CP_COMPACT_SUM_FLAG)) { + blkaddr = start_sum_block(sbi); + ret = dev_write(&journal->n_nats, blkaddr << F2FS_BLKSIZE_BITS, + SUM_JOURNAL_SIZE, WRITE_LIFE_NONE); + ASSERT(ret >= 0); + return; + } + if (is_set_ckpt_flags(cp, CP_UMOUNT_FLAG)) blkaddr = sum_blk_addr(sbi, NR_CURSEG_TYPE, CURSEG_HOT_DATA); else @@ -806,6 +814,14 @@ static void rewrite_sit_in_journal(struct f2fs_sb_info *sbi, unsigned int segno, } } + if (is_set_ckpt_flags(cp, CP_COMPACT_SUM_FLAG)) { + blkaddr = start_sum_block(sbi); + ret = dev_write(&journal->n_sits, (blkaddr << F2FS_BLKSIZE_BITS) + SUM_JOURNAL_SIZE, + SUM_JOURNAL_SIZE, WRITE_LIFE_NONE); + ASSERT(ret >= 0); + return; + } + if (is_set_ckpt_flags(cp, CP_UMOUNT_FLAG)) blkaddr = sum_blk_addr(sbi, NR_CURSEG_TYPE, CURSEG_COLD_DATA); else -- 2.43.0 _______________________________________________ Linux-f2fs-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
