Btrfs-progs: add function btrfs_get_subvol to get root_info of a subvol

We need a function which can get the root_info of a given
subvol. This is in preparation to add support for the show
sub-cli.

Signed-off-by: Anand Jain <anand.jain@oracle.com>
This commit is contained in:
Anand Jain 2013-02-01 15:56:23 +08:00 committed by David Sterba
parent 1999aae995
commit 2d2c9cef4b
2 changed files with 39 additions and 0 deletions

View File

@ -1468,6 +1468,44 @@ int btrfs_list_subvols_print(int fd, struct btrfs_list_filter_set *filter_set,
return 0; return 0;
} }
int btrfs_get_subvol(int fd, struct root_info *the_ri)
{
int ret = -1;
struct root_lookup rl;
struct rb_node *rbn;
struct root_info *ri;
u64 root_id = btrfs_list_get_path_rootid(fd);
if (btrfs_list_subvols(fd, &rl))
return 1;
rbn = rb_first(&rl.root);
while(rbn) {
ri = rb_entry(rbn, struct root_info, rb_node);
resolve_root(&rl, ri, root_id);
if (!comp_entry_with_rootid(the_ri, ri, 0)) {
memcpy(the_ri, ri, offsetof(struct root_info, path));
if (ri->path)
the_ri->path = strdup(ri->path);
else
the_ri->path = NULL;
if (ri->name)
the_ri->name = strdup(ri->name);
else
the_ri->name = NULL;
if (ri->full_path)
the_ri->full_path = strdup(ri->full_path);
else
the_ri->name = NULL;
ret = 0;
break;
}
rbn = rb_next(rbn);
}
__free_all_subvolumn(&rl);
return ret;
}
static int print_one_extent(int fd, struct btrfs_ioctl_search_header *sh, static int print_one_extent(int fd, struct btrfs_ioctl_search_header *sh,
struct btrfs_file_extent_item *item, struct btrfs_file_extent_item *item,
u64 found_gen, u64 *cache_dirid, u64 found_gen, u64 *cache_dirid,

View File

@ -152,3 +152,4 @@ int btrfs_list_find_updated_files(int fd, u64 root_id, u64 oldest_gen);
int btrfs_list_get_default_subvolume(int fd, u64 *default_id); int btrfs_list_get_default_subvolume(int fd, u64 *default_id);
char *btrfs_list_path_for_root(int fd, u64 root); char *btrfs_list_path_for_root(int fd, u64 root);
u64 btrfs_list_get_path_rootid(int fd); u64 btrfs_list_get_path_rootid(int fd);
int btrfs_get_subvol(int fd, struct root_info *the_ri);