diff options
| author | Andrew Morton <akpm@osdl.org> | 2003-07-04 19:36:23 -0700 |
|---|---|---|
| committer | Linus Torvalds <torvalds@home.osdl.org> | 2003-07-04 19:36:23 -0700 |
| commit | 104e6fdc6f35ea08e1c6ed03158b336b2e9983ed (patch) | |
| tree | 1a71ac3ab118e44192fe9aa38a6aec11134663b1 /drivers | |
| parent | 7d2483a936d9012f0a8ed9b61e191d6b827a66d2 (diff) | |
[PATCH] elevator completion API
From: Nick Piggin <piggin@cyberone.com.au>
Introduces an elevator_completed_req() callback with which the generic
queueing layer may tell an IO scheduler that a particualr request has
finished.
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/block/elevator.c | 9 | ||||
| -rw-r--r-- | drivers/block/ll_rw_blk.c | 2 |
2 files changed, 11 insertions, 0 deletions
diff --git a/drivers/block/elevator.c b/drivers/block/elevator.c index bf40a06781d5..406755724e03 100644 --- a/drivers/block/elevator.c +++ b/drivers/block/elevator.c @@ -371,6 +371,14 @@ int elv_may_queue(request_queue_t *q, int rw) return 1; } +void elv_completed_request(request_queue_t *q, struct request *rq) +{ + elevator_t *e = &q->elevator; + + if (e->elevator_completed_req_fn) + e->elevator_completed_req_fn(q, rq); +} + int elv_register_queue(struct gendisk *disk) { request_queue_t *q = disk->queue; @@ -418,5 +426,6 @@ EXPORT_SYMBOL(__elv_add_request); EXPORT_SYMBOL(elv_next_request); EXPORT_SYMBOL(elv_remove_request); EXPORT_SYMBOL(elv_queue_empty); +EXPORT_SYMBOL(elv_completed_request); EXPORT_SYMBOL(elevator_exit); EXPORT_SYMBOL(elevator_init); diff --git a/drivers/block/ll_rw_blk.c b/drivers/block/ll_rw_blk.c index 1debfebc2f57..71750da0db6d 100644 --- a/drivers/block/ll_rw_blk.c +++ b/drivers/block/ll_rw_blk.c @@ -1510,6 +1510,8 @@ void __blk_put_request(request_queue_t *q, struct request *req) if (unlikely(--req->ref_count)) return; + elv_completed_request(req->q, req); + req->rq_status = RQ_INACTIVE; req->q = NULL; req->rl = NULL; |
