From: Kent Overstreet <koverstreet@google.com>
To: linux-kernel@vger.kernel.org, linux-bcache@vger.kernel.org
Cc: Kent Overstreet <koverstreet@google.com>,
tj@kernel.org, axboe@kernel.dk, paul.gortmaker@windriver.com
Subject: [PATCH 3/3] block: convert elevator to generic rb tree code
Date: Fri, 25 May 2012 13:57:41 -0700 [thread overview]
Message-ID: <1337979461-19654-4-git-send-email-koverstreet@google.com> (raw)
In-Reply-To: <1337979461-19654-1-git-send-email-koverstreet@google.com>
Change-Id: I676968e201f0de9a0d0a7813e2fcc6873343e8c3
Signed-off-by: Kent Overstreet <koverstreet@google.com>
---
block/elevator.c | 42 ++++++++++++------------------------------
1 file changed, 12 insertions(+), 30 deletions(-)
diff --git a/block/elevator.c b/block/elevator.c
index f016855..7429682 100644
--- a/block/elevator.c
+++ b/block/elevator.c
@@ -295,28 +295,21 @@ static struct request *elv_rqhash_find(struct request_queue *q, sector_t offset)
return NULL;
}
+static int elv_rb_cmp(struct rb_node *l, struct rb_node *r)
+{
+ return clamp_t(int64_t,
+ blk_rq_pos(rb_entry(l, struct request, rb_node)) -
+ blk_rq_pos(rb_entry(r, struct request, rb_node)),
+ -1, 1);
+}
+
/*
* RB-tree support functions for inserting/lookup/removal of requests
* in a sorted RB tree.
*/
void elv_rb_add(struct rb_root *root, struct request *rq)
{
- struct rb_node **p = &root->rb_node;
- struct rb_node *parent = NULL;
- struct request *__rq;
-
- while (*p) {
- parent = *p;
- __rq = rb_entry(parent, struct request, rb_node);
-
- if (blk_rq_pos(rq) < blk_rq_pos(__rq))
- p = &(*p)->rb_left;
- else if (blk_rq_pos(rq) >= blk_rq_pos(__rq))
- p = &(*p)->rb_right;
- }
-
- rb_link_node(&rq->rb_node, parent, p);
- rb_insert_color(&rq->rb_node, root);
+ rb_insert_allow_dup(root, &rq->rb_node, elv_rb_cmp);
}
EXPORT_SYMBOL(elv_rb_add);
@@ -330,21 +323,10 @@ EXPORT_SYMBOL(elv_rb_del);
struct request *elv_rb_find(struct rb_root *root, sector_t sector)
{
- struct rb_node *n = root->rb_node;
- struct request *rq;
-
- while (n) {
- rq = rb_entry(n, struct request, rb_node);
+ struct request search = { .__sector = sector };
+ struct rb_node *r = _rb_search(root, &search.rb_node, elv_rb_cmp);
- if (sector < blk_rq_pos(rq))
- n = n->rb_left;
- else if (sector > blk_rq_pos(rq))
- n = n->rb_right;
- else
- return rq;
- }
-
- return NULL;
+ return container_of_or_null(r, struct request, rb_node);
}
EXPORT_SYMBOL(elv_rb_find);
--
1.7.9.3.327.g2980b
next prev parent reply other threads:[~2012-05-25 20:57 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-05-25 20:57 [PATCH 0/3] Generic rb tree code Kent Overstreet
2012-05-25 20:57 ` [PATCH 1/3] rbtree: Add rb_insert(), rb_search(), etc Kent Overstreet
[not found] ` <1337979461-19654-2-git-send-email-koverstreet-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2012-05-28 23:35 ` Tejun Heo
2012-05-28 23:35 ` Tejun Heo
2012-05-25 20:57 ` [PATCH 2/3] timerqueue: convert to generic rb tree code Kent Overstreet
2012-05-25 20:57 ` Kent Overstreet [this message]
[not found] ` <1337979461-19654-4-git-send-email-koverstreet-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2012-05-28 23:17 ` [PATCH 3/3] block: convert elevator " Tejun Heo
2012-05-28 23:17 ` Tejun Heo
2012-05-29 3:25 ` Kent Overstreet
[not found] ` <20120529032502.GA10175-RcKxWJ4Cfj3IzGYXcIpNmNLIRw13R84JkQQo+JxHRPFibQn6LdNjmg@public.gmane.org>
2012-05-29 5:24 ` Tejun Heo
2012-05-29 5:24 ` Tejun Heo
[not found] ` <20120529052458.GA17366-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2012-05-29 6:57 ` Kent Overstreet
2012-05-29 6:57 ` Kent Overstreet
[not found] ` <1337979461-19654-1-git-send-email-koverstreet-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2012-05-28 23:22 ` [PATCH 0/3] Generic " Tejun Heo
2012-05-28 23:22 ` Tejun Heo
[not found] ` <20120528232246.GC20954-RcKxWJ4Cfj1J2suj2OqeGauc2jM2gXBXkQQo+JxHRPFibQn6LdNjmg@public.gmane.org>
2012-05-29 3:30 ` Kent Overstreet
2012-05-29 3:30 ` Kent Overstreet
[not found] ` <20120529033032.GB10175-RcKxWJ4Cfj3IzGYXcIpNmNLIRw13R84JkQQo+JxHRPFibQn6LdNjmg@public.gmane.org>
2012-05-29 5:28 ` Tejun Heo
2012-05-29 5:28 ` Tejun Heo
2012-05-31 21:03 ` Jan Kara
2012-05-31 21:03 ` Jan Kara
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=1337979461-19654-4-git-send-email-koverstreet@google.com \
--to=koverstreet@google.com \
--cc=axboe@kernel.dk \
--cc=linux-bcache@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=paul.gortmaker@windriver.com \
--cc=tj@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.