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;
|
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,
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Loading…
Reference in New Issue