btrfs-progs: fix listing deleted subvolumes
authorDavid Sterba <dsterba@suse.cz>
Fri, 28 Mar 2014 12:39:57 +0000 (13:39 +0100)
committerChris Mason <clm@fb.com>
Sat, 5 Apr 2014 00:54:35 +0000 (17:54 -0700)
The real check whether to show deleted or live subvolumes was skipped if
just '-d' was specified without other filters. The 'deleted' filter was
not accounted.

It is now handled as a normal filter, that additionally sets the only_delete
global status in order to be processed before any other filters in
filter_root().

Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
btrfs-list.c

index 912b27c3decae7be639864873d2cfc3729d93f20..542dfe0c1a20717b53b2b3ec53e68eb1ad4179b2 100644 (file)
@@ -1216,11 +1216,6 @@ int btrfs_list_setup_filter(struct btrfs_list_filter_set **filter_set,
        BUG_ON(filter >= BTRFS_LIST_FILTER_MAX);
        BUG_ON(set->nfilters > set->total);
 
-       if (filter == BTRFS_LIST_FILTER_DELETED) {
-               set->only_deleted = 1;
-               return 0;
-       }
-
        if (set->nfilters == set->total) {
                size = set->total + BTRFS_LIST_NFILTERS_INCREASE;
                size = sizeof(*set) + size * sizeof(struct btrfs_list_filter);
@@ -1239,6 +1234,9 @@ int btrfs_list_setup_filter(struct btrfs_list_filter_set **filter_set,
 
        BUG_ON(set->filters[set->nfilters].filter_func);
 
+       if (filter == BTRFS_LIST_FILTER_DELETED)
+               set->only_deleted = 1;
+
        set->filters[set->nfilters].filter_func = all_filter_funcs[filter];
        set->filters[set->nfilters].data = data;
        set->nfilters++;
@@ -1250,7 +1248,7 @@ static int filter_root(struct root_info *ri,
 {
        int i, ret;
 
-       if (!set || !set->nfilters)
+       if (!set)
                return 1;
 
        if (set->only_deleted && !ri->deleted)