Commit Graph

612 Commits

Author SHA1 Message Date
Tejun Heo
5a7c47eefb [BLOCK] noop-iosched: reimplementation of request dispatching
The original implementation directly used dispatch queue.  As new
generic dispatch queue imposes stricter rules over ioscheds and
dispatch queue usage, this direct use becomes somewhat problematic.
This patch reimplements noop-iosched such that it complies to generic
iosched model better.  Request merging with q->last_merge and
rq->queuelist.prev/next work again now.

Signed-off-by: Tejun Heo <htejun@gmail.com>
Signed-off-by: Jens Axboe <axboe@suse.de
2005-11-12 10:56:52 +01:00
Tejun Heo
b740d98f56 [BLOCK] cfq-iosched: fix slice_left calculation
When cfq slice expires, remainder of slice is calculated and stored in
cfqq->slice_left.  Current code calculates the opposite of remainder -
how many jiffies the cfqq has used past slice end.  This patch fixes
the bug.

Signed-off-by: Tejun Heo <htejun@gmail.com>
Signed-off-by: Jens Axboe <axboe@suse.de>
2005-11-12 10:56:36 +01:00
Tejun Heo
be56123568 [BLOCK] fix string handling in elv_iosched_store
elv_iosched_store doesn't terminate string passed from userspace if
it's too long.  Also, if the written length is zero (probably not
possible), it accesses elevator_name[-1].  This patch fixes both bugs.

Signed-off-by: Tejun Heo <htejun@gmail.com>
Signed-off-by: Jens Axboe <axboe@suse.de>
2005-11-12 10:56:21 +01:00
Tejun Heo
15853af9f0 [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>
2005-11-12 10:56:06 +01:00
Tejun Heo
1b5ed5e1f1 [BLOCK] cfq-iosched: cfq forced dispatching fix
cfq forced dispatching might not return all requests on the queue.
This bug can hang elevator switchinig and corrupt request ordering
during flush sequence.

Signed-off-by: Tejun Heo <htejun@gmail.com>
Signed-off-by: Jens Axboe <axboe@suse.de>
2005-11-12 10:55:51 +01:00
Tejun Heo
407df2aa29 [BLOCK] elevator: run queue in elevator_switch
elevator_dispatch needs to run queue after forced dispatching;
otherwise, the queue might stall.

Signed-off-by: Tejun Heo <htejun@gmail.com>
Signed-off-by: Jens Axboe <axboe@suse.de>
2005-11-12 10:55:37 +01:00
Jens Axboe
47a004103d [BLOCK] Document the READ/WRITE splitup of the disk stats
Use the symbolic name where appropriate and add a comment to the
disk_stats structure.

Signed-off-by: Jens Axboe <axboe@suse.de>
2005-11-12 10:55:21 +01:00
Zachary Amsden
cff3ba2204 [BLOCK] elevator init fixes #2
In addition to the first patch, which is probably goodness, I found the
cause of my panic - applying this patch fixes it and now I am booting.
If the chosen_elevator[] is not found, fall back to noop.

Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Jens Axboe <axboe@suse.de>
2005-11-12 10:55:05 +01:00
Zachary Amsden
b8ea2cb512 [BLOCK] elevator init fixes
I got a panic in the elevator code, backtrace :

Unable to handle kernel NULL pointer dereference at virtual address 00000060
..
EIP is at elevator_put+0x0/0x30 (null elevator_type passed)
..
elevator_init+0x38
blk_init_queu_node+0xc9
floppy_init+0xdb
do_initcalls+0x23
init+0x10a
init+0x0

Clearly if the kmalloc here fails, e->elevator_type is not yet set; this
appears to be the correct fix, but I think I probably hit the second case
due to a race condition.  Someone more familiar with the elevator code
should look at this more closely until I can determine if I can reproduce.

Signed-off-by: Zachary Amsden <zach@vmware.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Jens Axboe <axboe@suse.de>
2005-11-12 10:54:48 +01:00
Linus Torvalds
333c47c847 Merge branch 'block-dir' of git://brick.kernel.dk/data/git/linux-2.6-block 2005-11-07 08:32:39 -08:00
Jens Axboe
c6ea2ba7b8 [BLOCK] iosched: fix setting of default io scheduler
With the recent reorg of the io scheduler selection, it unfortunately
became possible to select an io scheduler to be the default even if it
wasn't builtin. Fix this by requiring the default scheduler to be
builtin.

Signed-off-by: Jens Axboe <axboe@suse.de>
2005-11-04 08:44:58 +01:00
Jens Axboe
3a65dfe8c0 [BLOCK] Move all core block layer code to new block/ directory
drivers/block/ is right now a mix of core and driver parts. Lets move
the core parts to a new top level directory. Al will move the fs/
related block parts to block/ next.

Signed-off-by: Jens Axboe <axboe@suse.de>
2005-11-04 08:43:35 +01:00