+ ret = dev_read_block(node_blk, blkaddr);
+ ASSERT(ret >= 0);
+ if (le32_to_cpu(node_blk->footer.ino) != nid ||
+ le32_to_cpu(node_blk->footer.nid) != nid)
+ continue;
+ MSG(0, "Info: nid: %u, blkaddr: %lu\n", nid, blkaddr);
+ MSG(0, "node_blk.footer.flag [0x%x]\n",
le32_to_cpu(node_blk->footer.flag));
+ MSG(0, "node_blk.footer.cp_ver [%x]\n",
(u32)(cpver_of_node(node_blk)));
+ print_inode_info(sbi, node_blk, 0);
+ }
+
+ free(node_blk);
+}
+
int dump_node(struct f2fs_sb_info *sbi, nid_t nid, int force)
{
struct node_info ni;
diff --git a/fsck/fsck.h b/fsck/fsck.h
index ce5fffe..0c819f0 100644
--- a/fsck/fsck.h
+++ b/fsck/fsck.h
@@ -262,6 +262,7 @@ struct dump_option {
int start_ssa;
int end_ssa;
int32_t blk_addr;
+ nid_t scan_nid;
};
extern void nat_dump(struct f2fs_sb_info *, nid_t, nid_t);
diff --git a/fsck/main.c b/fsck/main.c
index e4cfdf4..c7ad5ad 100644
--- a/fsck/main.c
+++ b/fsck/main.c
@@ -93,6 +93,7 @@ void dump_usage()
MSG(0, "[options]:\n");
MSG(0, " -d debug level [default:0]\n");
MSG(0, " -i inode no (hex)\n");
+ MSG(0, " -I inode no (hex) scan full disk\n");
MSG(0, " -n [NAT dump nid from #1~#2 (decimal), for all 0~-1]\n");
MSG(0, " -M show a block map\n");
MSG(0, " -s [SIT dump segno from #1~#2 (decimal), for all 0~-1]\n");
@@ -382,7 +383,7 @@ void f2fs_parse_options(int argc, char *argv[])
}
} else if (!strcmp("dump.f2fs", prog)) {
#ifdef WITH_DUMP
- const char *option_string = "d:i:n:Ms:Sa:b:V";
+ const char *option_string = "d:i:I:n:Ms:Sa:b:V";
static struct dump_option dump_opt = {
.nid = 0, /* default root ino */
.start_nat = -1,
@@ -392,6 +393,7 @@ void f2fs_parse_options(int argc, char *argv[])
.start_ssa = -1,
.end_ssa = -1,
.blk_addr = -1,
+ .scan_nid = 0,
};
c.func = DUMP;
@@ -424,6 +426,14 @@ void f2fs_parse_options(int argc, char *argv[])
ret = sscanf(optarg, "%x",
&dump_opt.nid);
break;
+ case 'I':
+ if (strncmp(optarg, "0x", 2))
+ ret = sscanf(optarg, "%d",
+ &dump_opt.scan_nid);
+ else
+ ret = sscanf(optarg, "%x",
+ &dump_opt.scan_nid);
+ break;
case 'n':
ret = sscanf(optarg, "%d~%d",
&dump_opt.start_nat,
@@ -916,6 +926,8 @@ static void do_dump(struct f2fs_sb_info *sbi)
dump_info_from_blkaddr(sbi, opt->blk_addr);
if (opt->nid)
dump_node(sbi, opt->nid, 0);
+ if (opt->scan_nid)
+ dump_node_scan_disk(sbi, opt->scan_nid);
print_cp_state(flag);
diff --git a/man/dump.f2fs.8 b/man/dump.f2fs.8
index 1ddb7fc..94bf5f3 100644
--- a/man/dump.f2fs.8
+++ b/man/dump.f2fs.8
@@ -10,6 +10,10 @@ dump.f2fs \- retrieve directory and file entries from an
F2FS-formated image
.I inode number
]
[
+.B \-I
+.I inode number
+]
+[
.B \-n
.I NAT range
]
@@ -52,6 +56,9 @@ is 0 on success and -1 on failure.
.BI \-i " inode number"
Specify an inode number to dump out.
.TP
+.BI \-I " inode number"
+Specify an inode number and scan full disk to dump out, include history inode
block
+.TP
.BI \-n " NAT range"
Specify a range presented by nids to dump NAT entries.
.TP