From: Fengguang Wu <wfg@mail.ustc.edu.cn>
To: Jens Axboe <axboe@suse.de>
Cc: linux-kernel@vger.kernel.org, Andrew Morton <akpm@osdl.org>,
Nick Piggin <nickpiggin@yahoo.com.au>,
Lubos Lunak <l.lunak@suse.cz>,
Wu Fengguang <wfg@mail.ustc.edu.cn>
Subject: [PATCH 7/7] iosched: introduce deadline_kick_page()
Date: Sat, 24 Jun 2006 10:04:05 +0800 [thread overview]
Message-ID: <351116974.29400@ustc.edu.cn> (raw)
Message-ID: <20060624024259.755490540@localhost.localdomain> (raw)
In-Reply-To: 20060624020358.719251923@localhost.localdomain
[-- Attachment #1: iosched-kick-page-deadline.patch --]
[-- Type: text/plain, Size: 1891 bytes --]
Introduce deadline_kick_page() to
- find the request containing the page
- remove its BIO_RW_AHEAD flag
- reschedule if it was of type READA
Signed-off-by: Wu Fengguang <wfg@mail.ustc.edu.cn>
---
block/deadline-iosched.c | 45 +++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 43 insertions(+), 2 deletions(-)
--- linux-2.6.17-rc6-mm2.orig/block/deadline-iosched.c
+++ linux-2.6.17-rc6-mm2/block/deadline-iosched.c
@@ -317,6 +317,44 @@ deadline_add_request(struct request_queu
}
/*
+ * We have a pending read on @page,
+ * find the corresponding request of type READA,
+ * promote it to READ, and reschedule it.
+ */
+static int
+deadline_kick_page(struct request_queue *q, struct page *page)
+{
+ struct deadline_data *dd = q->elevator->elevator_data;
+ struct deadline_rq *drq;
+ struct request *rq;
+ struct list_head *pos;
+ struct bio_vec *bvec;
+ struct bio *bio;
+ int i;
+
+ list_for_each(pos, &dd->fifo_list[READ]) {
+ drq = list_entry_fifo(pos);
+ rq = drq->request;
+ if (rq->flags & (1 << BIO_RW_AHEAD)) {
+ rq_for_each_bio(bio, rq) {
+ bio_for_each_segment(bvec, bio, i) {
+ if (page == bvec->bv_page)
+ goto found;
+ }
+ }
+ }
+ }
+
+ return -1;
+
+found:
+ rq->flags &= ~(1 << BIO_RW_AHEAD);
+ list_del(&drq->fifo);
+ deadline_add_drq_fifo(dd, rq);
+ return 0;
+}
+
+/*
* remove rq from rbtree, fifo, and hash
*/
static void deadline_remove_request(request_queue_t *q, struct request *rq)
@@ -794,6 +832,7 @@ static struct elevator_type iosched_dead
.elevator_merge_req_fn = deadline_merged_requests,
.elevator_dispatch_fn = deadline_dispatch_requests,
.elevator_add_req_fn = deadline_add_request,
+ .elevator_kick_page_fn = deadline_kick_page,
.elevator_queue_empty_fn = deadline_queue_empty,
.elevator_former_req_fn = deadline_former_request,
.elevator_latter_req_fn = deadline_latter_request,
--
next prev parent reply other threads:[~2006-06-24 2:44 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-06-24 2:03 [PATCH 0/7] [RFC] iosched: make a difference between read/readahead requests Fengguang Wu
2006-06-24 2:03 ` Fengguang Wu
2006-06-24 2:03 ` [PATCH 1/7] iosched: introduce WRITEA Fengguang Wu
2006-06-24 2:03 ` Fengguang Wu
2006-06-24 2:04 ` [PATCH 2/7] iosched: introduce parameter deadline.reada_expire Fengguang Wu
2006-06-24 2:04 ` Fengguang Wu
2006-06-24 2:04 ` [PATCH 4/7] iosched: submit READA requests on possible readahead code path Fengguang Wu
2006-06-24 2:04 ` Fengguang Wu
2006-06-24 2:04 ` [PATCH 6/7] iosched: run elv_kick_page() on sync read Fengguang Wu
2006-06-24 2:04 ` Fengguang Wu
2006-06-24 2:04 ` Fengguang Wu [this message]
2006-06-24 2:04 ` [PATCH 7/7] iosched: introduce deadline_kick_page() Fengguang Wu
-- strict thread matches above, loose matches on Subject: below --
2006-06-24 8:20 [PATCH 0/7] [RFC] iosched: make a difference between read/readahead requests Fengguang Wu
2006-06-24 8:20 ` [PATCH 7/7] iosched: introduce deadline_kick_page() Fengguang Wu
2006-06-24 8:20 ` Fengguang Wu
2006-06-24 11:01 ` Jens Axboe
2006-06-25 6:32 ` Fengguang Wu
2006-06-25 6:32 ` Fengguang Wu
2006-06-28 11:27 ` Jens Axboe
2006-07-04 1:32 ` Fengguang Wu
2006-07-04 1:32 ` Fengguang Wu
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=351116974.29400@ustc.edu.cn \
--to=wfg@mail.ustc.edu.cn \
--cc=akpm@osdl.org \
--cc=axboe@suse.de \
--cc=l.lunak@suse.cz \
--cc=linux-kernel@vger.kernel.org \
--cc=nickpiggin@yahoo.com.au \
/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.