Currently, -a option add filter and change subvolume path as follows:
  - If a subvolume is a child of the specified path, nothing changes
  - otherwise, adds <FS_TREE> to head

This is rather meaningless, so let's remove this filter.

As a result, the behavior of -a option becomes the same as
default behavior of sub list in progs <= 4.17

[Example]
 $ mkfs.btrfs -f $DEV
 $ mount $DEV /mnt

 $ btrfs subvolume create /mnt/AAA
 $ btrfs subvolume create /mnt/AAA/BBB
 $ btrfs subvolume create /mnt/ZZZ

 $ btrfs subvolume list -a /mnt
 ID 256 gen 9 top level 5 path AAA
 ID 257 gen 9 top level 256 path AAA/BBB
 ID 258 gen 10 top level 5 path ZZZ

 ** output of progs <= 4.17
 $ btrfs subvolume list -a /mnt
 ID 256 gen 9 top level 5 path AAA
 ID 257 gen 9 top level 256 path <FS_TREE>/AAA/BBB
 ID 258 gen 10 top level 5 path ZZZ

Signed-off-by: Misono Tomohiro <misono.tomoh...@jp.fujitsu.com>
---
 Documentation/btrfs-subvolume.asciidoc |  6 ++++--
 cmds-subvolume.c                       | 35 ++++------------------------------
 2 files changed, 8 insertions(+), 33 deletions(-)

diff --git a/Documentation/btrfs-subvolume.asciidoc 
b/Documentation/btrfs-subvolume.asciidoc
index cd91385a..20fae1e1 100644
--- a/Documentation/btrfs-subvolume.asciidoc
+++ b/Documentation/btrfs-subvolume.asciidoc
@@ -118,8 +118,10 @@ Path filtering;;
 -o::::
 print only subvolumes below specified <path>.
 -a::::
-print all the subvolumes in the filesystem and distinguish between
-absolute and relative path with respect to the given <path>.
+print all the subvolumes in the filesystem, including subvolumes
+which cannot be accessed from current mount point.
+path to be shown is relative to the top-level subvolume
+(require root privileges).
 -f::::
 follow mounted subvolumes below <path> recursively and list them too
 (only if it is the same filesystem). If top-level subvolume is mounted
diff --git a/cmds-subvolume.c b/cmds-subvolume.c
index 802f5c5e..dab266aa 100644
--- a/cmds-subvolume.c
+++ b/cmds-subvolume.c
@@ -759,28 +759,6 @@ static int filter_topid_equal(struct listed_subvol 
*subvol, uint64_t data)
        return subvol->info.parent_id == data;
 }
 
-static int filter_full_path(struct listed_subvol *subvol, uint64_t data)
-{
-       /*
-        * This implements the same behavior as before the conversion to
-        * libbtrfsutil, which is mostly nonsensical.
-        */
-       if (subvol->info.parent_id != data) {
-               char *tmp;
-               int ret;
-
-               ret = asprintf(&tmp, "<FS_TREE>/%s", subvol->path);
-               if (ret == -1) {
-                       error("out of memory");
-                       exit(1);
-               }
-
-               free(subvol->path);
-               subvol->path = tmp;
-       }
-       return 1;
-}
-
 static int filter_by_parent(struct listed_subvol *subvol, uint64_t data)
 {
        return !uuid_compare(subvol->info.parent_uuid,
@@ -798,7 +776,6 @@ static btrfs_list_filter_func_v2 all_filter_funcs[] = {
        [BTRFS_LIST_FILTER_CGEN_LESS]           = filter_cgen_less,
        [BTRFS_LIST_FILTER_CGEN_EQUAL]          = filter_cgen_equal,
        [BTRFS_LIST_FILTER_TOPID_EQUAL]         = filter_topid_equal,
-       [BTRFS_LIST_FILTER_FULL_PATH]           = filter_full_path,
        [BTRFS_LIST_FILTER_BY_PARENT]           = filter_by_parent,
 };
 
@@ -1574,9 +1551,9 @@ static const char * const cmd_subvol_list_usage[] = {
        "",
        "Path filtering:",
        "-o           print only subvolumes below specified path",
-       "-a           print all the subvolumes in the filesystem and",
-       "             distinguish absolute and relative path with respect",
-       "             to the given <path> (require root privileges)",
+       "-a           print all the subvolumes in the filesystem.",
+       "             path to be shown is relative to the top-level",
+       "             subvolume (require root privileges)",
        "-f           follow mounted subvolumes below the specified path",
        "             and list them too (only if it is the same filesystem)",
        "",
@@ -1783,11 +1760,7 @@ static int cmd_subvol_list(int argc, char **argv)
        if (ret)
                goto out;
 
-       if (is_list_all)
-               btrfs_list_setup_filter_v2(&filter_set,
-                                       BTRFS_LIST_FILTER_FULL_PATH,
-                                       top_id);
-       else if (is_only_in_path)
+       if (is_only_in_path)
                btrfs_list_setup_filter_v2(&filter_set,
                                        BTRFS_LIST_FILTER_TOPID_EQUAL,
                                        top_id);
-- 
2.14.4


--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to