From: Anand jain <Anand.Jain@oracle.com>
To: linux-btrfs@vger.kernel.org
Subject: [PATCH] Btrfs-progs: make btrfs_list_setup_filter to modify a set filter
Date: Fri, 28 Sep 2012 20:55:48 +0800 [thread overview]
Message-ID: <1348836948-19537-1-git-send-email-Anand.Jain@oracle.com> (raw)
In-Reply-To: <50584E6D.8000602@cn.fujitsu.com>
From: Anand Jain <anand.jain@oracle.com>
Signed-off-by: Anand Jain <anand.jain@oracle.com>
---
btrfs-list.c | 50 ++++++++++++++++++++++++++++++++------------------
1 files changed, 32 insertions(+), 18 deletions(-)
diff --git a/btrfs-list.c b/btrfs-list.c
index e5f0f96..b1c9714 100644
--- a/btrfs-list.c
+++ b/btrfs-list.c
@@ -1213,37 +1213,51 @@ void btrfs_list_free_filter_set(struct btrfs_list_filter_set *filter_set)
free(filter_set);
}
+static int btrfs_list_is_filter_set(struct btrfs_list_filter_set *fset,
+ enum btrfs_list_filter_enum filter)
+{
+ int i;
+ for (i=0; i < fset->nfilters; i++) {
+ if (fset->filters[i].filter_func == all_filter_funcs[filter])
+ return i;
+ }
+ return -1;
+}
+
int btrfs_list_setup_filter(struct btrfs_list_filter_set **filter_set,
enum btrfs_list_filter_enum filter, u64 data)
{
struct btrfs_list_filter_set *set = *filter_set;
int size;
+ int nfilter;
BUG_ON(!set);
BUG_ON(filter >= BTRFS_LIST_FILTER_MAX);
BUG_ON(set->nfilters > set->total);
- if (set->nfilters == set->total) {
- size = set->total + BTRFS_LIST_NFILTERS_INCREASE;
- size = sizeof(*set) + size * sizeof(struct btrfs_list_filter);
- set = realloc(set, size);
- if (!set) {
- fprintf(stderr, "memory allocation failed\n");
- exit(1);
- }
+ nfilter = btrfs_list_is_filter_set(set, filter);
+ if (nfilter < 0) {
+ if (set->nfilters == set->total) {
+ size = set->total + BTRFS_LIST_NFILTERS_INCREASE;
+ size = sizeof(*set) + size * sizeof(struct btrfs_list_filter);
+ set = realloc(set, size);
+ if (!set) {
+ fprintf(stderr, "memory allocation failed\n");
+ exit(1);
+ }
- memset(&set->filters[set->total], 0,
- BTRFS_LIST_NFILTERS_INCREASE *
- sizeof(struct btrfs_list_filter));
- set->total += BTRFS_LIST_NFILTERS_INCREASE;
- *filter_set = set;
+ memset(&set->filters[set->total], 0,
+ BTRFS_LIST_NFILTERS_INCREASE *
+ sizeof(struct btrfs_list_filter));
+ set->total += BTRFS_LIST_NFILTERS_INCREASE;
+ *filter_set = set;
+ }
+ nfilter = set->nfilters;
+ set->nfilters++;
}
- BUG_ON(set->filters[set->nfilters].filter_func);
-
- set->filters[set->nfilters].filter_func = all_filter_funcs[filter];
- set->filters[set->nfilters].data = data;
- set->nfilters++;
+ set->filters[nfilter].filter_func = all_filter_funcs[filter];
+ set->filters[nfilter].data = data;
return 0;
}
--
1.7.1
next prev parent reply other threads:[~2012-09-28 12:52 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-09-18 10:35 [PATCH V4 0/7 ] Btrfs-progs: enhance btrfs subvol list only to show read-only snapshots Miao Xie
2012-09-18 10:50 ` [PATCH V4 1/7] Btrfs-progs: move the function declarations to a new head file Miao Xie
2012-09-18 10:52 ` [PATCH V4 2/7] Btrfs-progs: fix compile warning of implicit declaration of "list_snapshots" Miao Xie
2012-09-18 10:55 ` [PATCH V4 3/7] Btrfs-progs: fix wrong usage of btrfs subvolume list command Miao Xie
2012-09-18 10:59 ` [PATCH V4 4/7] Btrfs-progs: fix wrong way to check if the root item contains otime and uuid Miao Xie
2012-09-19 1:55 ` Anand Jain
2012-09-19 2:58 ` Miao Xie
2012-09-18 11:06 ` [PATCH V4 5/7] Btrfs-progs: restructure list_subvolumes Miao Xie
2012-09-20 12:09 ` David Sterba
2012-10-09 16:05 ` Alex Lyakas
2012-10-10 2:12 ` Miao Xie
2012-10-10 19:45 ` Alex Lyakas
2012-10-15 4:06 ` Miao Xie
2012-09-18 11:09 ` [PATCH V4 6/7] Btrfs-progs: enhance btrfs subvol list only to show read-only snapshots Miao Xie
2012-09-18 15:11 ` Martin Steigerwald
2012-09-18 11:12 ` [PATCH V4 7/7] Btrfs-progs: update the manpage entries for the btrfs subvolume list Miao Xie
2012-09-28 12:55 ` Anand jain [this message]
2012-10-03 0:03 ` [PATCH V4 0/7 ] Btrfs-progs: enhance btrfs subvol list only to show read-only snapshots Chris Mason
2012-10-09 6:01 ` Miao Xie
2012-10-09 15:57 ` David Sterba
2012-10-04 10:12 ` [PATCH] Btrfs-progs: add parent uuid for snapshots Anand jain
2012-10-04 12:00 ` Dong Robin
2012-10-05 2:27 ` Anand Jain
2012-10-05 2:25 ` [PATCH] Btrfs-progs: Corrections and additions to the btrfs man page Anand jain
2012-10-05 2:25 ` [PATCH] Btrfs-progs: Update btrfs man page for -P option Anand jain
2012-10-05 2:25 ` [PATCH V2] Btrfs-progs: add parent uuid for snapshots Anand jain
2012-10-09 15:44 ` David Sterba
2012-10-16 7:00 ` [PATCH V3] " Anand jain
2012-10-16 7:00 ` [PATCH] Btrfs-progs: make use of column_name Anand jain
2012-10-16 7:00 ` [PATCH] Btrfs-progs: update man page for -u and -q option in subvol list Anand jain
2012-10-16 7:03 ` [PATCH V2] Btrfs-progs: add parent uuid for snapshots Anand Jain
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1348836948-19537-1-git-send-email-Anand.Jain@oracle.com \
--to=anand.jain@oracle.com \
--cc=linux-btrfs@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).