mirror of
https://github.com/kdave/btrfs-progs
synced 2025-03-31 23:57:26 +00:00
btrfs-progs: check: fill csum root from all extent roots
We may have multiple extent roots, so cycle through all of the extent roots and populate the csum tree based on the content of every extent root we have in the file system. Signed-off-by: Josef Bacik <josef@toxicpanda.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
bb575e3818
commit
e68e73318f
24
check/main.c
24
check/main.c
@ -9703,9 +9703,9 @@ out:
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int fill_csum_tree_from_extent(struct btrfs_trans_handle *trans)
|
||||
static int fill_csum_tree_from_extent(struct btrfs_trans_handle *trans,
|
||||
struct btrfs_root *extent_root)
|
||||
{
|
||||
struct btrfs_root *extent_root = btrfs_extent_root(gfs_info, 0);
|
||||
struct btrfs_root *csum_root;
|
||||
struct btrfs_path path;
|
||||
struct btrfs_extent_item *ei;
|
||||
@ -9779,10 +9779,26 @@ static int fill_csum_tree_from_extent(struct btrfs_trans_handle *trans)
|
||||
static int fill_csum_tree(struct btrfs_trans_handle *trans,
|
||||
int search_fs_tree)
|
||||
{
|
||||
struct btrfs_root *root;
|
||||
struct rb_node *n;
|
||||
int ret;
|
||||
|
||||
if (search_fs_tree)
|
||||
return fill_csum_tree_from_fs(trans);
|
||||
else
|
||||
return fill_csum_tree_from_extent(trans);
|
||||
|
||||
root = btrfs_extent_root(gfs_info, 0);
|
||||
while (1) {
|
||||
ret = fill_csum_tree_from_extent(trans, root);
|
||||
if (ret)
|
||||
break;
|
||||
n = rb_next(&root->rb_node);
|
||||
if (!n)
|
||||
break;
|
||||
root = rb_entry(n, struct btrfs_root, rb_node);
|
||||
if (root->root_key.objectid != BTRFS_EXTENT_TREE_OBJECTID)
|
||||
break;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void free_roots_info_cache(void)
|
||||
|
Loading…
Reference in New Issue
Block a user