>-----Original Message----- >From: shengyong (A) >Sent: Wednesday, March 07, 2018 11:21 AM >To: heyunlei; jaeg...@kernel.org; Yuchao (T); >linux-f2fs-devel@lists.sourceforge.net >Subject: Re: [f2fs-dev] [PATCH] dump.f2fs: fix a wrong report for dump an {d, >id, did}node > >Hi, Yunlei, > >On 2018/3/7 10:41, Yunlei He wrote: >> fix a wrong report for dump an {d,id,did}node like this: >> >> [print_node_info: 283] Node ID [0x6820:26656] is direct node or indirect >> node. >> [0] [0x 16b6684 : 23815812] >> [1] [0x 16b6685 : 23815813] >> [2] [0x 16b6686 : 23815814] >> [3] [0x 16b6687 : 23815815] >> [4] [0x 16b6688 : 23815816] >> [5] [0x 16b6689 : 23815817] >> [6] [0x 16b668a : 23815818] >> [7] [0x 16b668b : 23815819] >> [8] [0x 16b668c : 23815820] >> [9] [0x 16b668d : 23815821] >> [10] [0x 16b668e : 23815822] >> Invalid (i)node block >> >> Signed-off-by: Yunlei He <heyun...@huawei.com> >> --- >> fsck/dump.c | 25 ++++++++++++++++--------- >> 1 file changed, 16 insertions(+), 9 deletions(-) >> >> diff --git a/fsck/dump.c b/fsck/dump.c >> index 23e4f47..5abdd6d 100644 >> --- a/fsck/dump.c >> +++ b/fsck/dump.c >> @@ -475,6 +475,18 @@ dump: >> } >> } >> >> +static bool is_sit_bitmap_set(struct f2fs_sb_info *sbi, u32 blk_addr) >> +{ >> + struct seg_entry *se; >> + u32 offset; >> + >> + se = get_seg_entry(sbi, GET_SEGNO(sbi, blk_addr)); >> + offset = OFFSET_IN_SEG(sbi, blk_addr); >> + >> + return f2fs_test_bit(offset, >> + (const char *)se->cur_valid_map) != 0; >> +} >> + >> void dump_node(struct f2fs_sb_info *sbi, nid_t nid, int force) >> { >> struct node_info ni; >> @@ -492,13 +504,14 @@ void dump_node(struct f2fs_sb_info *sbi, nid_t nid, >> int force) >> >> if (ni.blk_addr == 0x0) >> MSG(force, "Invalid nat entry\n\n"); >> + else if (!is_sit_bitmap_set(sbi, ni.blk_addr)) >> + MSG(force, "Invalid node blk addr\n\n"); >> >> DBG(1, "node_blk.footer.ino [0x%x]\n", >> le32_to_cpu(node_blk->footer.ino)); >> DBG(1, "node_blk.footer.nid [0x%x]\n", >> le32_to_cpu(node_blk->footer.nid)); >> >> if (le32_to_cpu(node_blk->footer.ino) == ni.ino && >> - le32_to_cpu(node_blk->footer.nid) == ni.nid && >> - ni.ino == ni.nid) { >> + le32_to_cpu(node_blk->footer.nid) == ni.nid) { > >I think we should not remove "ni.ino == ni.nid" here. dump_file() can only be >called on inode. > >Thanks, >Sheng > >> print_node_info(sbi, node_blk, force);
How about move the judgement before dump_file? Thanks. >> dump_file(sbi, &ni, node_blk, force); >> } else { >> @@ -678,8 +691,6 @@ int dump_info_from_blkaddr(struct f2fs_sb_info *sbi, u32 >> blk_addr) >> int type; >> struct f2fs_summary sum_entry; >> struct node_info ni, ino_ni; >> - struct seg_entry *se; >> - u32 offset; >> int enc_name; >> int ret = 0; >> >> @@ -712,12 +723,8 @@ int dump_info_from_blkaddr(struct f2fs_sb_info *sbi, >> u32 blk_addr) >> return ret; >> } >> >> - se = get_seg_entry(sbi, GET_SEGNO(sbi, blk_addr)); >> - offset = OFFSET_IN_SEG(sbi, blk_addr); >> - >> - if (f2fs_test_bit(offset, (const char *)se->cur_valid_map) == 0) { >> + if (!is_sit_bitmap_set(sbi, blk_addr)) >> MSG(0, "\nblkaddr is not valid\n"); >> - } >> >> type = get_sum_entry(sbi, blk_addr, &sum_entry); >> nid = le32_to_cpu(sum_entry.nid); >> ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot _______________________________________________ Linux-f2fs-devel mailing list Linux-f2fs-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel