linux-btrfs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
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


  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).