diff options
-rw-r--r-- | btrfs-list.c | 8 | ||||
-rw-r--r-- | btrfs-list.h | 2 | ||||
-rw-r--r-- | cmds-subvolume.c | 7 |
3 files changed, 9 insertions, 8 deletions
diff --git a/btrfs-list.c b/btrfs-list.c index 1429dd90..e677f45c 100644 --- a/btrfs-list.c +++ b/btrfs-list.c @@ -1282,12 +1282,11 @@ static void __filter_and_sort_subvol(struct root_lookup *all_subvols, struct root_lookup *sort_tree, struct btrfs_list_filter_set *filter_set, struct btrfs_list_comparer_set *comp_set, - int fd) + u64 top_id) { struct rb_node *n; struct root_info *entry; int ret; - u64 top_id = btrfs_list_get_path_rootid(fd); root_lookup_init(sort_tree); @@ -1456,11 +1455,12 @@ static void print_all_volume_info(struct root_lookup *sorted_tree, int btrfs_list_subvols(int fd, struct btrfs_list_filter_set *filter_set, struct btrfs_list_comparer_set *comp_set, - int is_tab_result) + int is_tab_result, int full_path) { struct root_lookup root_lookup; struct root_lookup root_sort; int ret; + u64 top_id = (full_path ? 0 : btrfs_list_get_path_rootid(fd)); ret = __list_subvol_search(fd, &root_lookup); if (ret) { @@ -1478,7 +1478,7 @@ int btrfs_list_subvols(int fd, struct btrfs_list_filter_set *filter_set, return ret; __filter_and_sort_subvol(&root_lookup, &root_sort, filter_set, - comp_set, fd); + comp_set, top_id); print_all_volume_info(&root_sort, is_tab_result); __free_all_subvolumn(&root_lookup); diff --git a/btrfs-list.h b/btrfs-list.h index f7fbea6d..658e1ad0 100644 --- a/btrfs-list.h +++ b/btrfs-list.h @@ -101,7 +101,7 @@ int btrfs_list_setup_comparer(struct btrfs_list_comparer_set **comp_set, int btrfs_list_subvols(int fd, struct btrfs_list_filter_set *filter_set, struct btrfs_list_comparer_set *comp_set, - int is_tab_result); + int is_tab_result, int full_path); 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); diff --git a/cmds-subvolume.c b/cmds-subvolume.c index fbda90b8..dcb4299a 100644 --- a/cmds-subvolume.c +++ b/cmds-subvolume.c @@ -311,7 +311,7 @@ static int cmd_subvol_list(int argc, char **argv) char *subvol; int is_tab_result = 0; int is_list_all = 0; - int is_only_in_path = 1; + int is_only_in_path = 0; struct option long_options[] = { {"sort", 1, NULL, 'S'}, {0, 0, 0, 0} @@ -419,7 +419,8 @@ static int cmd_subvol_list(int argc, char **argv) top_id); ret = btrfs_list_subvols(fd, filter_set, comparer_set, - is_tab_result); + is_tab_result, + !is_list_all && !is_only_in_path); if (ret) return 19; return 0; @@ -625,7 +626,7 @@ static int cmd_subvol_get_default(int argc, char **argv) btrfs_list_setup_filter(&filter_set, BTRFS_LIST_FILTER_ROOTID, default_id); - ret = btrfs_list_subvols(fd, filter_set, NULL, 0); + ret = btrfs_list_subvols(fd, filter_set, NULL, 0, 1); if (ret) return 19; return 0; |