#include "crc32c.h"
#include "extent-cache.h"
#include "find-root.h"
+#include "help.h"
-static void usage(void)
+static void find_root_usage(void)
{
fprintf(stderr, "Usage: find-roots [-a] [-o search_objectid] "
"[ -g search_generation ] [ -l search_level ] <device>\n");
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);
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;
break;
case GETOPT_VAL_HELP:
default:
- usage();
+ find_root_usage();
exit(c != GETOPT_VAL_HELP);
}
}
set_argv0(argv);
- argc = argc - optind;
- if (check_argc_min(argc, 1)) {
- usage();
+ if (check_argc_min(argc - optind, 1)) {
+ find_root_usage();
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, 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));
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;
}