summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--btrfs-find-root.c17
-rw-r--r--find-root.c10
-rw-r--r--find-root.h2
3 files changed, 15 insertions, 14 deletions
diff --git a/btrfs-find-root.c b/btrfs-find-root.c
index fc3812ce..2d5bbb2a 100644
--- a/btrfs-find-root.c
+++ b/btrfs-find-root.c
@@ -69,7 +69,6 @@ static void get_root_gen_and_level(u64 objectid, struct btrfs_fs_info *fs_info,
case BTRFS_CHUNK_TREE_OBJECTID:
level = btrfs_super_chunk_root_level(super);
gen = btrfs_super_chunk_root_generation(super);
- printf("Search for chunk root is not supported yet\n");
break;
case BTRFS_TREE_LOG_OBJECTID:
level = btrfs_super_log_root_level(super);
@@ -145,7 +144,7 @@ static void print_find_root_result(struct cache_tree *result,
int main(int argc, char **argv)
{
- struct btrfs_root *root;
+ struct btrfs_fs_info *fs_info;
struct btrfs_find_root_filter filter = {0};
struct cache_tree result;
struct cache_extent *found;
@@ -192,16 +191,18 @@ int main(int argc, char **argv)
exit(1);
}
- root = open_ctree(argv[optind], 0, OPEN_CTREE_CHUNK_ROOT_ONLY);
- if (!root) {
- fprintf(stderr, "Open ctree failed\n");
+ fs_info = open_ctree_fs_info(argv[optind], 0, 0,
+ OPEN_CTREE_CHUNK_ROOT_ONLY |
+ OPEN_CTREE_IGNORE_CHUNK_TREE_ERROR);
+ if (!fs_info) {
+ error("open ctree failed");
exit(1);
}
cache_tree_init(&result);
- get_root_gen_and_level(filter.objectid, root->fs_info,
+ get_root_gen_and_level(filter.objectid, fs_info,
&filter.match_gen, &filter.match_level);
- ret = btrfs_find_root_search(root, &filter, &result, &found);
+ ret = btrfs_find_root_search(fs_info, &filter, &result, &found);
if (ret < 0) {
fprintf(stderr, "Fail to search the tree root: %s\n",
strerror(-ret));
@@ -215,7 +216,7 @@ int main(int argc, char **argv)
print_find_root_result(&result, &filter);
out:
btrfs_find_root_free(&result);
- close_ctree(root);
+ close_ctree_fs_info(fs_info);
btrfs_close_all_devices();
return ret;
}
diff --git a/find-root.c b/find-root.c
index f0204c80..823db6ad 100644
--- a/find-root.c
+++ b/find-root.c
@@ -101,17 +101,16 @@ static int add_eb_to_result(struct extent_buffer *eb,
* Return 1 if found root with given gen/level and set *match to it.
* Return <0 if error happens
*/
-int btrfs_find_root_search(struct btrfs_root *chunk_root,
+int btrfs_find_root_search(struct btrfs_fs_info *fs_info,
struct btrfs_find_root_filter *filter,
struct cache_tree *result,
struct cache_extent **match)
{
- struct btrfs_fs_info *fs_info = chunk_root->fs_info;
struct extent_buffer *eb;
u64 chunk_offset = 0;
u64 chunk_size = 0;
u64 offset = 0;
- u32 leafsize = chunk_root->leafsize;
+ u32 leafsize = btrfs_super_leafsize(fs_info->super_copy);
int suppress_errors = 0;
int ret = 0;
@@ -133,8 +132,9 @@ int btrfs_find_root_search(struct btrfs_root *chunk_root,
}
for (offset = chunk_offset;
offset < chunk_offset + chunk_size;
- offset += chunk_root->leafsize) {
- eb = read_tree_block(chunk_root, offset, leafsize, 0);
+ offset += leafsize) {
+ eb = read_tree_block_fs_info(fs_info, offset, leafsize,
+ 0);
if (!eb || IS_ERR(eb))
continue;
ret = add_eb_to_result(eb, result, leafsize, filter,
diff --git a/find-root.h b/find-root.h
index 1c67ebcc..60d1111d 100644
--- a/find-root.h
+++ b/find-root.h
@@ -65,7 +65,7 @@ struct btrfs_find_root_filter {
* This *WILL* take *TONS* of extra time.
*/
};
-int btrfs_find_root_search(struct btrfs_root *chunk_root,
+int btrfs_find_root_search(struct btrfs_fs_info *fs_info,
struct btrfs_find_root_filter *filter,
struct cache_tree *result,
struct cache_extent **match);