On 2017/12/29 10:11, Yunlei He wrote: > Retrun directly if blkaddr is not valid.
SIT info can be wrong, how about just printing that blkaddr is invalid during dumping? Thanks, > > Signed-off-by: Yunlei He <[email protected]> > --- > fsck/dump.c | 10 ++++++++++ > fsck/mount.c | 2 +- > 2 files changed, 11 insertions(+), 1 deletion(-) > > diff --git a/fsck/dump.c b/fsck/dump.c > index 9f0993e..bf79e2f 100644 > --- a/fsck/dump.c > +++ b/fsck/dump.c > @@ -586,6 +586,8 @@ 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 ret = 0; > > MSG(0, "\n== Dump data from block address ==\n\n"); > @@ -617,6 +619,14 @@ 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) { > + MSG(0, "\nblkaddr is not valid\n"); > + return 0; > + } > + > type = get_sum_entry(sbi, blk_addr, &sum_entry); > nid = le32_to_cpu(sum_entry.nid); > > diff --git a/fsck/mount.c b/fsck/mount.c > index 678eeae..665fa4b 100644 > --- a/fsck/mount.c > +++ b/fsck/mount.c > @@ -1869,7 +1869,7 @@ int find_next_free_block(struct f2fs_sb_info *sbi, u64 > *to, int left, int type) > struct f2fs_super_block *sb = F2FS_RAW_SUPER(sbi); > struct seg_entry *se; > u32 segno; > - u64 offset; > + u32 offset; > int not_enough = 0; > u64 end_blkaddr = (get_sb(segment_count_main) << > get_sb(log_blocks_per_seg)) + get_sb(main_blkaddr); > ------------------------------------------------------------------------------ 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 [email protected] https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
