summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--btrfs-list.c8
-rw-r--r--btrfs-list.h2
-rw-r--r--cmds-subvolume.c7
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;