mirror of
https://github.com/kdave/btrfs-progs
synced 2024-12-25 07:32:22 +00:00
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:
parent
1999aae995
commit
2d2c9cef4b
38
btrfs-list.c
38
btrfs-list.c
@ -1468,6 +1468,44 @@ int btrfs_list_subvols_print(int fd, struct btrfs_list_filter_set *filter_set,
|
||||
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,
|
||||
struct btrfs_file_extent_item *item,
|
||||
u64 found_gen, u64 *cache_dirid,
|
||||
|
@ -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);
|
||||
char *btrfs_list_path_for_root(int fd, u64 root);
|
||||
u64 btrfs_list_get_path_rootid(int fd);
|
||||
int btrfs_get_subvol(int fd, struct root_info *the_ri);
|
||||
|
Loading…
Reference in New Issue
Block a user