Commit 2f659546 authored by Qu Wenruo's avatar Qu Wenruo Committed by David Sterba

btrfs: tree-checker: Replace root parameter with fs_info

When inspecting the error message with real corruption, the "root=%llu"
always shows "1" (root tree), instead of the correct owner.

The problem is that we are getting @root from page->mapping->host, which
points the same btree inode, so we will always get the same root.

This makes the root owner output meaningless, and harder to port
tree-checker to btrfs-progs.

So get rid of the false and meaningless @root parameter and replace it
with @fs_info.
To get the owner, we can only rely on btrfs_header_owner() now.
Signed-off-by: default avatarQu Wenruo <wqu@suse.com>
Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
parent 393da918
...@@ -602,12 +602,12 @@ static int btree_readpage_end_io_hook(struct btrfs_io_bio *io_bio, ...@@ -602,12 +602,12 @@ static int btree_readpage_end_io_hook(struct btrfs_io_bio *io_bio,
* that we don't try and read the other copies of this block, just * that we don't try and read the other copies of this block, just
* return -EIO. * return -EIO.
*/ */
if (found_level == 0 && btrfs_check_leaf_full(root, eb)) { if (found_level == 0 && btrfs_check_leaf_full(fs_info, eb)) {
set_bit(EXTENT_BUFFER_CORRUPT, &eb->bflags); set_bit(EXTENT_BUFFER_CORRUPT, &eb->bflags);
ret = -EIO; ret = -EIO;
} }
if (found_level > 0 && btrfs_check_node(root, eb)) if (found_level > 0 && btrfs_check_node(fs_info, eb))
ret = -EIO; ret = -EIO;
if (!ret) if (!ret)
...@@ -3854,7 +3854,7 @@ void btrfs_mark_buffer_dirty(struct extent_buffer *buf) ...@@ -3854,7 +3854,7 @@ void btrfs_mark_buffer_dirty(struct extent_buffer *buf)
* So here we should only check item pointers, not item data. * So here we should only check item pointers, not item data.
*/ */
if (btrfs_header_level(buf) == 0 && if (btrfs_header_level(buf) == 0 &&
btrfs_check_leaf_relaxed(root, buf)) { btrfs_check_leaf_relaxed(fs_info, buf)) {
btrfs_print_leaf(buf); btrfs_print_leaf(buf);
ASSERT(0); ASSERT(0);
} }
......
This diff is collapsed.
...@@ -25,14 +25,15 @@ ...@@ -25,14 +25,15 @@
* Will check not only the item pointers, but also every possible member * Will check not only the item pointers, but also every possible member
* in item data. * in item data.
*/ */
int btrfs_check_leaf_full(struct btrfs_root *root, struct extent_buffer *leaf); int btrfs_check_leaf_full(struct btrfs_fs_info *fs_info,
struct extent_buffer *leaf);
/* /*
* Less strict leaf checker. * Less strict leaf checker.
* Will only check item pointers, not reading item data. * Will only check item pointers, not reading item data.
*/ */
int btrfs_check_leaf_relaxed(struct btrfs_root *root, int btrfs_check_leaf_relaxed(struct btrfs_fs_info *fs_info,
struct extent_buffer *leaf); struct extent_buffer *leaf);
int btrfs_check_node(struct btrfs_root *root, struct extent_buffer *node); int btrfs_check_node(struct btrfs_fs_info *fs_info, struct extent_buffer *node);
#endif #endif
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment