summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--btrfs-list.c12
-rw-r--r--cmds-subvolume.c16
-rw-r--r--man/btrfs.8.in6
3 files changed, 25 insertions, 9 deletions
diff --git a/btrfs-list.c b/btrfs-list.c
index f079d998..e5f0f969 100644
--- a/btrfs-list.c
+++ b/btrfs-list.c
@@ -627,8 +627,16 @@ static int resolve_root(struct root_lookup *rl, struct root_info *ri,
break;
}
- /* if the ref_tree refers to ourselves, we're at the top */
- if (next == found->root_id) {
+ if (next == BTRFS_FS_TREE_OBJECTID) {
+ char p[] = "<FS_TREE>";
+ add_len = strlen(p);
+ len = strlen(full_path);
+ tmp = malloc(len + add_len + 2);
+ memcpy(tmp + add_len + 1, full_path, len);
+ tmp[add_len] = '/';
+ memcpy(tmp, p, add_len);
+ free(full_path);
+ full_path = tmp;
ri->top_id = next;
break;
}
diff --git a/cmds-subvolume.c b/cmds-subvolume.c
index b96af3eb..3b4edb63 100644
--- a/cmds-subvolume.c
+++ b/cmds-subvolume.c
@@ -260,11 +260,12 @@ static int cmd_subvol_delete(int argc, char **argv)
}
static const char * const cmd_subvol_list_usage[] = {
- "btrfs subvolume list [-purt] [-s 0|1] [-g [+|-]value] [-c [+|-]value] "
+ "btrfs subvolume list [-apurt] [-s 0|1] [-g [+|-]value] [-c [+|-]value] "
"[--sort=gen,ogen,rootid,path] <path>",
"List subvolumes (and snapshots)",
"",
"-p print parent ID",
+ "-a print all the subvolumes in the filesystem.",
"-u print the uuid of subvolumes (and snapshots)",
"-t print the result as a table",
"-s value list snapshots with generation in ascending/descending order",
@@ -295,6 +296,7 @@ static int cmd_subvol_list(int argc, char **argv)
int c;
char *subvol;
int is_tab_result = 0;
+ int is_list_all = 0;
struct option long_options[] = {
{"sort", 1, NULL, 'S'},
{0, 0, 0, 0}
@@ -306,7 +308,7 @@ static int cmd_subvol_list(int argc, char **argv)
optind = 1;
while(1) {
c = getopt_long(argc, argv,
- "ps:urg:c:t", long_options, NULL);
+ "aps:urg:c:t", long_options, NULL);
if (c < 0)
break;
@@ -314,6 +316,9 @@ static int cmd_subvol_list(int argc, char **argv)
case 'p':
btrfs_list_setup_print_column(BTRFS_LIST_PARENT);
break;
+ case 'a':
+ is_list_all = 1;
+ break;
case 't':
is_tab_result = 1;
break;
@@ -389,9 +394,10 @@ static int cmd_subvol_list(int argc, char **argv)
}
top_id = btrfs_list_get_path_rootid(fd);
- btrfs_list_setup_filter(&filter_set,
- BTRFS_LIST_FILTER_TOPID_EQUAL,
- top_id);
+ if (!is_list_all)
+ btrfs_list_setup_filter(&filter_set,
+ BTRFS_LIST_FILTER_TOPID_EQUAL,
+ top_id);
ret = btrfs_list_subvols(fd, filter_set, comparer_set,
is_tab_result);
diff --git a/man/btrfs.8.in b/man/btrfs.8.in
index 3f7765d6..632802a2 100644
--- a/man/btrfs.8.in
+++ b/man/btrfs.8.in
@@ -11,7 +11,7 @@ btrfs \- control a btrfs filesystem
.PP
\fBbtrfs\fP \fBsubvolume create\fP\fI [<dest>/]<name>\fP
.PP
-\fBbtrfs\fP \fBsubvolume list\fP\fI [-pr] [-s 0|1] [-g [+|-]value] [-c [+|-]value] [--rootid=rootid,gen,ogen,path] <path>\fP
+\fBbtrfs\fP \fBsubvolume list\fP\fI [-aprt] [-s 0|1] [-g [+|-]value] [-c [+|-]value] [--rootid=rootid,gen,ogen,path] <path>\fP
.PP
\fBbtrfs\fP \fBsubvolume set-default\fP\fI <id> <path>\fP
.PP
@@ -108,7 +108,7 @@ Create a subvolume in \fI<dest>\fR (or in the current directory if
\fI<dest>\fR is omitted).
.TP
-\fBsubvolume list\fR\fI [-pr][-s 0|1] [-g [+|-]value] [-c [+|-]value] [--sort=gen,ogen,rootid,path] <path>\fR
+\fBsubvolume list\fR\fI [-aprt][-s 0|1] [-g [+|-]value] [-c [+|-]value] [--sort=gen,ogen,rootid,path] <path>\fR
.RS
List the subvolumes present in the filesystem \fI<path>\fR. For every
subvolume the following information is shown by default.
@@ -124,6 +124,8 @@ and top level. The parent's ID may be used at mount time via the
\fB-t\fP print the result as a table.
+\fB-a\fP print all the subvolumes in the filesystem.
+
\fB-r\fP only readonly subvolumes in the filesystem wille be listed.
\fB-s\fP only snapshot subvolumes in the filesystem will be listed.