btrfs-progs: fix listing deleted subvolumes

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>
This commit is contained in:
David Sterba 2014-03-28 13:39:57 +01:00 committed by Chris Mason
parent 4724d7b075
commit f9f9ee18a5
1 changed files with 4 additions and 6 deletions

View 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(filter >= BTRFS_LIST_FILTER_MAX);
BUG_ON(set->nfilters > set->total); BUG_ON(set->nfilters > set->total);
if (filter == BTRFS_LIST_FILTER_DELETED) {
set->only_deleted = 1;
return 0;
}
if (set->nfilters == set->total) { if (set->nfilters == set->total) {
size = set->total + BTRFS_LIST_NFILTERS_INCREASE; size = set->total + BTRFS_LIST_NFILTERS_INCREASE;
size = sizeof(*set) + size * sizeof(struct btrfs_list_filter); 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); 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].filter_func = all_filter_funcs[filter];
set->filters[set->nfilters].data = data; set->filters[set->nfilters].data = data;
set->nfilters++; set->nfilters++;
@ -1250,7 +1248,7 @@ static int filter_root(struct root_info *ri,
{ {
int i, ret; int i, ret;
if (!set || !set->nfilters) if (!set)
return 1; return 1;
if (set->only_deleted && !ri->deleted) if (set->only_deleted && !ri->deleted)