aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/blkdev.h
diff options
context:
space:
mode:
authorTejun Heo <htejun@gmail.com>2005-10-20 10:23:44 -0400
committerJens Axboe <axboe@nelson.home.kernel.dk>2005-10-28 02:44:24 -0400
commit8922e16cf6269e668123acb1ae1fdc62b7a3a4fc (patch)
tree272bff0b53bf6fe4a7787728a45a26a282ba2976 /include/linux/blkdev.h
parent2824bc9328467127083c1325f54b67d298c333b2 (diff)
[PATCH] 01/05 Implement generic dispatch queue
Implements generic dispatch queue which can replace all dispatch queues implemented by each iosched. This reduces code duplication, eases enforcing semantics over dispatch queue, and simplifies specific ioscheds. Signed-off-by: Tejun Heo <htejun@gmail.com> Signed-off-by: Jens Axboe <axboe@suse.de>
Diffstat (limited to 'include/linux/blkdev.h')
-rw-r--r--include/linux/blkdev.h17
1 files changed, 11 insertions, 6 deletions
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
index efdc9b5bc05c..2c7b9154927a 100644
--- a/include/linux/blkdev.h
+++ b/include/linux/blkdev.h
@@ -203,6 +203,7 @@ struct request {
203enum rq_flag_bits { 203enum rq_flag_bits {
204 __REQ_RW, /* not set, read. set, write */ 204 __REQ_RW, /* not set, read. set, write */
205 __REQ_FAILFAST, /* no low level driver retries */ 205 __REQ_FAILFAST, /* no low level driver retries */
206 __REQ_SORTED, /* elevator knows about this request */
206 __REQ_SOFTBARRIER, /* may not be passed by ioscheduler */ 207 __REQ_SOFTBARRIER, /* may not be passed by ioscheduler */
207 __REQ_HARDBARRIER, /* may not be passed by drive either */ 208 __REQ_HARDBARRIER, /* may not be passed by drive either */
208 __REQ_CMD, /* is a regular fs rw request */ 209 __REQ_CMD, /* is a regular fs rw request */
@@ -235,6 +236,7 @@ enum rq_flag_bits {
235 236
236#define REQ_RW (1 << __REQ_RW) 237#define REQ_RW (1 << __REQ_RW)
237#define REQ_FAILFAST (1 << __REQ_FAILFAST) 238#define REQ_FAILFAST (1 << __REQ_FAILFAST)
239#define REQ_SORTED (1 << __REQ_SORTED)
238#define REQ_SOFTBARRIER (1 << __REQ_SOFTBARRIER) 240#define REQ_SOFTBARRIER (1 << __REQ_SOFTBARRIER)
239#define REQ_HARDBARRIER (1 << __REQ_HARDBARRIER) 241#define REQ_HARDBARRIER (1 << __REQ_HARDBARRIER)
240#define REQ_CMD (1 << __REQ_CMD) 242#define REQ_CMD (1 << __REQ_CMD)
@@ -333,6 +335,13 @@ struct request_queue
333 end_flush_fn *end_flush_fn; 335 end_flush_fn *end_flush_fn;
334 336
335 /* 337 /*
338 * Dispatch queue sorting
339 */
340 sector_t last_sector;
341 struct request *boundary_rq;
342 unsigned int max_back_kb;
343
344 /*
336 * Auto-unplugging state 345 * Auto-unplugging state
337 */ 346 */
338 struct timer_list unplug_timer; 347 struct timer_list unplug_timer;
@@ -454,6 +463,7 @@ enum {
454#define blk_pm_request(rq) \ 463#define blk_pm_request(rq) \
455 ((rq)->flags & (REQ_PM_SUSPEND | REQ_PM_RESUME)) 464 ((rq)->flags & (REQ_PM_SUSPEND | REQ_PM_RESUME))
456 465
466#define blk_sorted_rq(rq) ((rq)->flags & REQ_SORTED)
457#define blk_barrier_rq(rq) ((rq)->flags & REQ_HARDBARRIER) 467#define blk_barrier_rq(rq) ((rq)->flags & REQ_HARDBARRIER)
458#define blk_barrier_preflush(rq) ((rq)->flags & REQ_BAR_PREFLUSH) 468#define blk_barrier_preflush(rq) ((rq)->flags & REQ_BAR_PREFLUSH)
459#define blk_barrier_postflush(rq) ((rq)->flags & REQ_BAR_POSTFLUSH) 469#define blk_barrier_postflush(rq) ((rq)->flags & REQ_BAR_POSTFLUSH)
@@ -611,12 +621,7 @@ extern void end_request(struct request *req, int uptodate);
611 621
612static inline void blkdev_dequeue_request(struct request *req) 622static inline void blkdev_dequeue_request(struct request *req)
613{ 623{
614 BUG_ON(list_empty(&req->queuelist)); 624 elv_dequeue_request(req->q, req);
615
616 list_del_init(&req->queuelist);
617
618 if (req->rl)
619 elv_remove_request(req->q, req);
620} 625}
621 626
622/* 627/*