On 2016/1/30 1:12, Jaegeuk Kim wrote: > Hi Yunlei, > > On Thu, Jan 28, 2016 at 04:18:16PM +0800, Yunlei He wrote: >> In some case, we need confirm node or data blkaddr is ok at first, >> and then fix the conflict in ssa block. If the node blkaddr happen to >> locate in data type segment caused by something error, may be we 'd >> better ignore it, and it's same with data blkaddr. >> >> Signed-off-by: Yunlei He <heyun...@huawei.com> >> --- >> fsck/fsck.c | 34 +++++++++++++++++++++++++--------- >> 1 file changed, 25 insertions(+), 9 deletions(-) >> >> diff --git a/fsck/fsck.c b/fsck/fsck.c >> index e7dd02f..fd82bef 100644 >> --- a/fsck/fsck.c >> +++ b/fsck/fsck.c >> @@ -129,6 +129,7 @@ static int is_valid_ssa_node_blk(struct f2fs_sb_info >> *sbi, u32 nid, >> { >> struct f2fs_summary_block *sum_blk; >> struct f2fs_summary *sum_entry; >> + struct seg_entry * se; >> u32 segno, offset; >> int need_fix = 0, ret = 0; >> int type; >> @@ -145,9 +146,16 @@ static int is_valid_ssa_node_blk(struct f2fs_sb_info >> *sbi, u32 nid, >> ret = -EINVAL; >> goto out; >> } >> - FIX_MSG("Summary footer indicates a node segment: 0x%x", segno); >> - sum_blk->footer.entry_type = SUM_TYPE_NODE; >> + >> need_fix = 1; >> + se = get_seg_entry(sbi, segno); >> + if(se->type >= 3 && se->type <= 5) { > > IS_NODESEG(se->type) ? > >> + FIX_MSG("Summary footer indicates a node segment: >> 0x%x", segno); >> + sum_blk->footer.entry_type = SUM_TYPE_NODE; >> + } else { >> + ret = -EINVAL; >> + goto out; >> + } >> } >> >> sum_entry = &(sum_blk->entries[offset]); >> @@ -235,6 +243,7 @@ static int is_valid_ssa_data_blk(struct f2fs_sb_info >> *sbi, u32 blk_addr, >> { >> struct f2fs_summary_block *sum_blk; >> struct f2fs_summary *sum_entry; >> + struct seg_entry * se; >> u32 segno, offset; >> int need_fix = 0, ret = 0; >> int type; >> @@ -251,9 +260,16 @@ static int is_valid_ssa_data_blk(struct f2fs_sb_info >> *sbi, u32 blk_addr, >> ret = -EINVAL; >> goto out; >> } >> - FIX_MSG("Summary footer indicates a data segment: 0x%x", segno); >> - sum_blk->footer.entry_type = SUM_TYPE_DATA; >> + >> need_fix = 1; >> + se = get_seg_entry(sbi, segno); >> + if (se->type >=0 && se->type <= 2) { > > IS_DATASEG(se->type) ?
yeah, it's good! Thanks. > >> + FIX_MSG("Summary footer indicates a data segment: >> 0x%x", segno); >> + sum_blk->footer.entry_type = SUM_TYPE_DATA; >> + } else { >> + ret = -EINVAL; >> + goto out; >> + } >> } >> >> sum_entry = &(sum_blk->entries[offset]); >> @@ -352,11 +368,6 @@ static int sanity_check_nid(struct f2fs_sb_info *sbi, >> u32 nid, >> return -EINVAL; >> } >> >> - if (is_valid_ssa_node_blk(sbi, nid, ni->blk_addr)) { >> - ASSERT_MSG("summary node block is not valid. [0x%x]", nid); >> - return -EINVAL; >> - } >> - >> ret = dev_read_block(node_blk, ni->blk_addr); >> ASSERT(ret >= 0); >> >> @@ -427,6 +438,11 @@ static int sanity_check_nid(struct f2fs_sb_info *sbi, >> u32 nid, >> ASSERT_MSG("orphan or xattr nid is duplicated [0x%x]\n", >> nid); >> >> + if (is_valid_ssa_node_blk(sbi, nid, ni->blk_addr)) { >> + ASSERT_MSG("summary node block is not valid. [0x%x]", nid); >> + return -EINVAL; >> + } >> + >> if (f2fs_test_sit_bitmap(sbi, ni->blk_addr) == 0) >> ASSERT_MSG("SIT bitmap is 0x0. blk_addr[0x%x]", >> ni->blk_addr); >> -- >> 1.9.1 >> >> >> ------------------------------------------------------------------------------ >> Site24x7 APM Insight: Get Deep Visibility into Application Performance >> APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month >> Monitor end-to-end web transactions and take corrective actions now >> Troubleshoot faster and improve end-user experience. Signup Now! >> http://pubads.g.doubleclick.net/gampad/clk?id=267308311&iu=/4140 >> _______________________________________________ >> Linux-f2fs-devel mailing list >> Linux-f2fs-devel@lists.sourceforge.net >> https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel > > . > ------------------------------------------------------------------------------ Site24x7 APM Insight: Get Deep Visibility into Application Performance APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month Monitor end-to-end web transactions and take corrective actions now Troubleshoot faster and improve end-user experience. Signup Now! http://pubads.g.doubleclick.net/gampad/clk?id=267308311&iu=/4140 _______________________________________________ Linux-f2fs-devel mailing list Linux-f2fs-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel