diff options
author | Tejun Heo <htejun@gmail.com> | 2005-11-10 02:52:05 -0500 |
---|---|---|
committer | Jens Axboe <axboe@nelson.home.kernel.dk> | 2005-11-12 04:56:06 -0500 |
commit | 15853af9f07673680439b224519c692f1352b959 (patch) | |
tree | e6a8fc1cd34dec568883cd62102e1e626d9241d9 /include | |
parent | 1b5ed5e1f1315e37380e55102f58bcae3344d2a7 (diff) |
[BLOCK] Implement elv_drain_elevator for improved switch error detection
This patch adds request_queue->nr_sorted which keeps the number of
requests in the iosched and implement elv_drain_elevator which
performs forced dispatching. elv_drain_elevator checks whether
iosched actually dispatches all requests it has and prints error
message if it doesn't. As buggy forced dispatching can result in
wrong barrier operations, I think this extra check is worthwhile.
Signed-off-by: Tejun Heo <htejun@gmail.com>
Signed-off-by: Jens Axboe <axboe@suse.de>
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/blkdev.h | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h index 025a7f084dbd..a33a31e71bbc 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h | |||
@@ -406,6 +406,7 @@ struct request_queue | |||
406 | 406 | ||
407 | atomic_t refcnt; | 407 | atomic_t refcnt; |
408 | 408 | ||
409 | unsigned int nr_sorted; | ||
409 | unsigned int in_flight; | 410 | unsigned int in_flight; |
410 | 411 | ||
411 | /* | 412 | /* |
@@ -631,6 +632,7 @@ static inline void elv_dispatch_add_tail(struct request_queue *q, | |||
631 | { | 632 | { |
632 | if (q->last_merge == rq) | 633 | if (q->last_merge == rq) |
633 | q->last_merge = NULL; | 634 | q->last_merge = NULL; |
635 | q->nr_sorted--; | ||
634 | 636 | ||
635 | q->end_sector = rq_end_sector(rq); | 637 | q->end_sector = rq_end_sector(rq); |
636 | q->boundary_rq = rq; | 638 | q->boundary_rq = rq; |