Re: [f2fs-dev] [PATCH v2] dump.f2fs: only dump nat inside the specified nid range
On 2018/7/2 11:59, Junling Zheng wrote: > Only dump nat info of nids inside the specified range. > > Signed-off-by: Junling Zheng > --- > v1 -> v2: > 1) change {start,end}_nat type into nid_t > 2) put ASSERT() sentence close up to malloc > 3) use F2FS_NODE_INO and F2FS_META_INO instead of ino 1 and 2 > 4) update man page of dump.f2fs > > fsck/dump.c | 82 ++--- > fsck/fsck.h | 6 ++-- > fsck/main.c | 4 +-- > man/dump.f2fs.8 | 13 ++-- > 4 files changed, 52 insertions(+), 53 deletions(-) > > diff --git a/fsck/dump.c b/fsck/dump.c > index 9236a43..942e874 100644 > --- a/fsck/dump.c > +++ b/fsck/dump.c > @@ -31,32 +31,35 @@ const char *seg_type_name[SEG_TYPE_MAX + 1] = { > "SEG_TYPE_NONE", > }; > > -void nat_dump(struct f2fs_sb_info *sbi) > +void nat_dump(struct f2fs_sb_info *sbi, nid_t start_nat, nid_t end_nat) > { > - struct f2fs_super_block *sb = F2FS_RAW_SUPER(sbi); > struct f2fs_nm_info *nm_i = NM_I(sbi); > struct f2fs_nat_block *nat_block; > struct f2fs_node *node_block; > - u32 nr_nat_blks, nid; > + nid_t nid; > pgoff_t block_off; > pgoff_t block_addr; > char buf[BUF_SZ]; > int seg_off; > int fd, ret, pack; pack = 1; > - unsigned int i; > > nat_block = (struct f2fs_nat_block *)calloc(BLOCK_SZ, 1); > - node_block = (struct f2fs_node *)calloc(BLOCK_SZ, 1); > ASSERT(nat_block); > - > - nr_nat_blks = get_sb(segment_count_nat) << > - (sbi->log_blocks_per_seg - 1); > + node_block = (struct f2fs_node *)calloc(BLOCK_SZ, 1); > + ASSERT(node_block); > > fd = open("dump_nat", O_CREAT|O_WRONLY|O_TRUNC, 0666); > ASSERT(fd >= 0); > > - for (block_off = 0; block_off < nr_nat_blks; pack = 1, block_off++) { > + for (nid = start_nat; nid < end_nat; pack = 1, nid++) { > + struct f2fs_nat_entry raw_nat; > + struct node_info ni; > + if(nid == 0 || nid == F2FS_NODE_INO(sbi) || > + nid == F2FS_META_INO(sbi)) > + continue; > > + ni.nid = nid; > + block_off = nid / NAT_ENTRY_PER_BLOCK; > seg_off = block_off >> sbi->log_blocks_per_seg; > block_addr = (pgoff_t)(nm_i->nat_blkaddr + > (seg_off << sbi->log_blocks_per_seg << 1) + > @@ -67,42 +70,11 @@ void nat_dump(struct f2fs_sb_info *sbi) > pack = 2; Nitpick, How about replacing above codes with existed function current_nat_addr() to avoid calculation bug, and since we need to set @pack, so we can add one parameter to do that? Thanks, > } > > - ret = dev_read_block(nat_block, block_addr); > - ASSERT(ret >= 0); > - > - nid = block_off * NAT_ENTRY_PER_BLOCK; > - for (i = 0; i < NAT_ENTRY_PER_BLOCK; i++) { > - struct f2fs_nat_entry raw_nat; > - struct node_info ni; > - ni.nid = nid + i; > - > - if(nid + i == 0 || nid + i == 1 || nid + i == 2 ) > - continue; > - if (lookup_nat_in_journal(sbi, nid + i, > - _nat) >= 0) { > - node_info_from_raw_nat(, _nat); > - ret = dev_read_block(node_block, ni.blk_addr); > - ASSERT(ret >= 0); > - if (ni.blk_addr != 0x0) { > - memset(buf, 0, BUF_SZ); > - snprintf(buf, BUF_SZ, > - "nid:%5u\tino:%5u\toffset:%5u" > - "\tblkaddr:%10u\tpack:%d\n", > - ni.nid, ni.ino, > - > le32_to_cpu(node_block->footer.flag) >> > - OFFSET_BIT_SHIFT, > - ni.blk_addr, pack); > - ret = write(fd, buf, strlen(buf)); > - ASSERT(ret >= 0); > - } > - } else { > - node_info_from_raw_nat(, > - _block->entries[i]); > - if (ni.blk_addr == 0) > - continue; > - > - ret = dev_read_block(node_block, ni.blk_addr); > - ASSERT(ret >= 0); > + if (lookup_nat_in_journal(sbi, nid, _nat) >= 0) { > + node_info_from_raw_nat(, _nat); > + ret = dev_read_block(node_block, ni.blk_addr); > + ASSERT(ret >= 0); > +
[f2fs-dev] [PATCH v2] dump.f2fs: only dump nat inside the specified nid range
Only dump nat info of nids inside the specified range. Signed-off-by: Junling Zheng --- v1 -> v2: 1) change {start,end}_nat type into nid_t 2) put ASSERT() sentence close up to malloc 3) use F2FS_NODE_INO and F2FS_META_INO instead of ino 1 and 2 4) update man page of dump.f2fs fsck/dump.c | 82 ++--- fsck/fsck.h | 6 ++-- fsck/main.c | 4 +-- man/dump.f2fs.8 | 13 ++-- 4 files changed, 52 insertions(+), 53 deletions(-) diff --git a/fsck/dump.c b/fsck/dump.c index 9236a43..942e874 100644 --- a/fsck/dump.c +++ b/fsck/dump.c @@ -31,32 +31,35 @@ const char *seg_type_name[SEG_TYPE_MAX + 1] = { "SEG_TYPE_NONE", }; -void nat_dump(struct f2fs_sb_info *sbi) +void nat_dump(struct f2fs_sb_info *sbi, nid_t start_nat, nid_t end_nat) { - struct f2fs_super_block *sb = F2FS_RAW_SUPER(sbi); struct f2fs_nm_info *nm_i = NM_I(sbi); struct f2fs_nat_block *nat_block; struct f2fs_node *node_block; - u32 nr_nat_blks, nid; + nid_t nid; pgoff_t block_off; pgoff_t block_addr; char buf[BUF_SZ]; int seg_off; int fd, ret, pack; - unsigned int i; nat_block = (struct f2fs_nat_block *)calloc(BLOCK_SZ, 1); - node_block = (struct f2fs_node *)calloc(BLOCK_SZ, 1); ASSERT(nat_block); - - nr_nat_blks = get_sb(segment_count_nat) << - (sbi->log_blocks_per_seg - 1); + node_block = (struct f2fs_node *)calloc(BLOCK_SZ, 1); + ASSERT(node_block); fd = open("dump_nat", O_CREAT|O_WRONLY|O_TRUNC, 0666); ASSERT(fd >= 0); - for (block_off = 0; block_off < nr_nat_blks; pack = 1, block_off++) { + for (nid = start_nat; nid < end_nat; pack = 1, nid++) { + struct f2fs_nat_entry raw_nat; + struct node_info ni; + if(nid == 0 || nid == F2FS_NODE_INO(sbi) || + nid == F2FS_META_INO(sbi)) + continue; + ni.nid = nid; + block_off = nid / NAT_ENTRY_PER_BLOCK; seg_off = block_off >> sbi->log_blocks_per_seg; block_addr = (pgoff_t)(nm_i->nat_blkaddr + (seg_off << sbi->log_blocks_per_seg << 1) + @@ -67,42 +70,11 @@ void nat_dump(struct f2fs_sb_info *sbi) pack = 2; } - ret = dev_read_block(nat_block, block_addr); - ASSERT(ret >= 0); - - nid = block_off * NAT_ENTRY_PER_BLOCK; - for (i = 0; i < NAT_ENTRY_PER_BLOCK; i++) { - struct f2fs_nat_entry raw_nat; - struct node_info ni; - ni.nid = nid + i; - - if(nid + i == 0 || nid + i == 1 || nid + i == 2 ) - continue; - if (lookup_nat_in_journal(sbi, nid + i, - _nat) >= 0) { - node_info_from_raw_nat(, _nat); - ret = dev_read_block(node_block, ni.blk_addr); - ASSERT(ret >= 0); - if (ni.blk_addr != 0x0) { - memset(buf, 0, BUF_SZ); - snprintf(buf, BUF_SZ, - "nid:%5u\tino:%5u\toffset:%5u" - "\tblkaddr:%10u\tpack:%d\n", - ni.nid, ni.ino, - le32_to_cpu(node_block->footer.flag) >> - OFFSET_BIT_SHIFT, - ni.blk_addr, pack); - ret = write(fd, buf, strlen(buf)); - ASSERT(ret >= 0); - } - } else { - node_info_from_raw_nat(, - _block->entries[i]); - if (ni.blk_addr == 0) - continue; - - ret = dev_read_block(node_block, ni.blk_addr); - ASSERT(ret >= 0); + if (lookup_nat_in_journal(sbi, nid, _nat) >= 0) { + node_info_from_raw_nat(, _nat); + ret = dev_read_block(node_block, ni.blk_addr); + ASSERT(ret >= 0); + if (ni.blk_addr != 0x0) { memset(buf, 0, BUF_SZ); snprintf(buf, BUF_SZ, "nid:%5u\tino:%5u\toffset:%5u" @@ -114,6 +86,26 @@ void nat_dump(struct f2fs_sb_info *sbi) ret =