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);
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