From: Sheng Yong <shengyo...@xiaomi.com> Add lookup_sit_in_journal() which is similar to lookup_nat_in_journal() to get the raw sit entry from journal if exist.
Signed-off-by: Sheng Yong <shengyo...@xiaomi.com> --- fsck/f2fs.h | 2 ++ fsck/mount.c | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/fsck/f2fs.h b/fsck/f2fs.h index a4888a817284..60e3a2ebb0ee 100644 --- a/fsck/f2fs.h +++ b/fsck/f2fs.h @@ -613,6 +613,8 @@ static inline int inline_xattr_size(struct f2fs_inode *inode) } extern int lookup_nat_in_journal(struct f2fs_sb_info *sbi, u32 nid, struct f2fs_nat_entry *ne); +extern int lookup_sit_in_journal(struct f2fs_sb_info *sbi, unsigned int segno, + struct f2fs_sit_entry *raw_sit); #define IS_SUM_NODE_SEG(sum) (F2FS_SUMMARY_BLOCK_FOOTER(sum)->entry_type == SUM_TYPE_NODE) #define IS_SUM_DATA_SEG(sum) (F2FS_SUMMARY_BLOCK_FOOTER(sum)->entry_type == SUM_TYPE_DATA) diff --git a/fsck/mount.c b/fsck/mount.c index b1f8e98dd7f0..1f2cc960b9c0 100644 --- a/fsck/mount.c +++ b/fsck/mount.c @@ -3290,6 +3290,24 @@ int lookup_nat_in_journal(struct f2fs_sb_info *sbi, u32 nid, return -1; } +int lookup_sit_in_journal(struct f2fs_sb_info *sbi, unsigned int segno, + struct f2fs_sit_entry *raw_sit) +{ + struct curseg_info *curseg = CURSEG_I(sbi, CURSEG_COLD_DATA); + struct f2fs_journal *journal = F2FS_SUMMARY_BLOCK_JOURNAL(curseg->sum_blk); + int i; + + for (i = 0; i < sits_in_cursum(journal); i++) { + if (segno_in_journal(journal, i) == segno) { + memcpy(raw_sit, &sit_in_journal(journal, i), + sizeof(struct f2fs_sit_entry)); + DBG(3, "==> Found sit [0x%x] in sit cache\n", segno); + return i; + } + } + return -1; +} + void nullify_nat_entry(struct f2fs_sb_info *sbi, u32 nid) { struct curseg_info *curseg = CURSEG_I(sbi, CURSEG_HOT_DATA); -- 2.43.0 _______________________________________________ Linux-f2fs-devel mailing list Linux-f2fs-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel