From: Jens Axboe <axboe@suse.de>
To: linux-kernel@vger.kernel.org
Cc: nickpiggin@yahoo.com.au
Subject: [PATCH 7/7] as-iosched: reuse rq for fifo
Date: Wed, 12 Jul 2006 10:06:19 +0200 [thread overview]
Message-ID: <20060712080618.GH13920@suse.de> (raw)
In-Reply-To: <20060712080319.GA13920@suse.de>
[PATCH] as-iosched: reuse rq for fifo
Saves some space in arq.
Signed-off-by: Jens Axboe <axboe@suse.de>
---
block/as-iosched.c | 32 ++++++++++++--------------------
1 files changed, 12 insertions(+), 20 deletions(-)
diff --git a/block/as-iosched.c b/block/as-iosched.c
index 000e776..66bd0bc 100644
--- a/block/as-iosched.c
+++ b/block/as-iosched.c
@@ -153,12 +153,6 @@ struct as_rq {
struct io_context *io_context; /* The submitting task */
- /*
- * expire fifo
- */
- struct list_head fifo;
- unsigned long expires;
-
unsigned int is_sync;
enum arq_state state;
};
@@ -893,7 +887,7 @@ static void as_remove_queued_request(req
if (ad->next_arq[data_dir] == arq)
ad->next_arq[data_dir] = as_find_next_arq(ad, arq);
- list_del_init(&arq->fifo);
+ rq_fifo_clear(rq);
as_del_arq_rb(ad, rq);
}
@@ -907,7 +901,7 @@ static void as_remove_queued_request(req
*/
static int as_fifo_expired(struct as_data *ad, int adir)
{
- struct as_rq *arq;
+ struct request *rq;
long delta_jif;
delta_jif = jiffies - ad->last_check_fifo[adir];
@@ -921,9 +915,9 @@ static int as_fifo_expired(struct as_dat
if (list_empty(&ad->fifo_list[adir]))
return 0;
- arq = list_entry_fifo(ad->fifo_list[adir].next);
+ rq = rq_entry_fifo(ad->fifo_list[adir].next);
- return time_after(jiffies, arq->expires);
+ return time_after(jiffies, rq_fifo_time(rq));
}
/*
@@ -1087,7 +1081,7 @@ static int as_dispatch_request(request_q
ad->changed_batch = 1;
}
ad->batch_data_dir = REQ_SYNC;
- arq = list_entry_fifo(ad->fifo_list[ad->batch_data_dir].next);
+ arq = RQ_DATA(rq_entry_fifo(ad->fifo_list[REQ_SYNC].next));
ad->last_check_fifo[ad->batch_data_dir] = jiffies;
goto dispatch_request;
}
@@ -1127,8 +1121,7 @@ dispatch_request:
if (as_fifo_expired(ad, ad->batch_data_dir)) {
fifo_expired:
- arq = list_entry_fifo(ad->fifo_list[ad->batch_data_dir].next);
- BUG_ON(arq == NULL);
+ arq = RQ_DATA(rq_entry_fifo(ad->fifo_list[ad->batch_data_dir].next));
}
if (ad->changed_batch) {
@@ -1184,8 +1177,8 @@ static void as_add_request(request_queue
/*
* set expire time (only used for reads) and add to fifo list
*/
- arq->expires = jiffies + ad->fifo_expire[data_dir];
- list_add_tail(&arq->fifo, &ad->fifo_list[data_dir]);
+ rq_set_fifo_time(rq, jiffies + ad->fifo_expire[data_dir]);
+ list_add_tail(&rq->queuelist, &ad->fifo_list[data_dir]);
as_update_arq(ad, arq); /* keep state machine up to date */
arq->state = AS_RQ_QUEUED;
@@ -1275,10 +1268,10 @@ static void as_merged_requests(request_q
* if anext expires before arq, assign its expire time to arq
* and move into anext position (anext will be deleted) in fifo
*/
- if (!list_empty(&arq->fifo) && !list_empty(&anext->fifo)) {
- if (time_before(anext->expires, arq->expires)) {
- list_move(&arq->fifo, &anext->fifo);
- arq->expires = anext->expires;
+ if (!list_empty(&req->queuelist) && !list_empty(&next->queuelist)) {
+ if (time_before(rq_fifo_time(next), rq_fifo_time(req))) {
+ list_move(&req->queuelist, &next->queuelist);
+ rq_set_fifo_time(req, rq_fifo_time(next));
/*
* Don't copy here but swap, because when anext is
* removed below, it must contain the unused context
@@ -1348,7 +1341,6 @@ static int as_set_request(request_queue_
arq->request = rq;
arq->state = AS_RQ_PRESCHED;
arq->io_context = NULL;
- INIT_LIST_HEAD(&arq->fifo);
rq->elevator_private = arq;
return 0;
}
--
1.4.1.ged0e0
--
Jens Axboe
prev parent reply other threads:[~2006-07-12 8:04 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-07-12 8:03 [PATCHSET] 0/7 IO scheduler abstractions Jens Axboe
2006-07-12 8:04 ` [PATCH 1/7] elevator: move the backmerging logic into the elevator core Jens Axboe
2006-07-12 8:04 ` [PATCH 2/7] rbtree: fixed reversed RB_EMPTY_NODE and rb_next/prev Jens Axboe
2006-07-12 8:04 ` [PATCH 3/7] elevator: abstract out the rbtree sort handling Jens Axboe
2006-07-12 8:05 ` [PATCH 4/7] elevator: introduce a way to reuse rq for internal FIFO handling Jens Axboe
2006-07-12 8:05 ` [PATCH 5/7] deadline-iosched: remove elevator private drq request type Jens Axboe
2006-07-12 8:06 ` [PATCH 6/7] cfq-iosched: convert to using the FIFO elevator defines Jens Axboe
2006-07-12 8:06 ` Jens Axboe [this message]
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=20060712080618.GH13920@suse.de \
--to=axboe@suse.de \
--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.