On Tue, Oct 08 2002, Peter Osterlund wrote:
I think I'll go study the deadline i/o scheduler code in detail.
Knock yourself out :). I'll get on this first thing tomorrow.
I don't think this is related to my problem, but the bio_rq_in_between function seems to assume that bio and rq are for the same device, but deadline_merge calls that function without making sure that is the case. Can't this make the insert point wrong?
The first thing to note is that the entries on the queue really _should_ be for the same device. In 2.4 and before we could have stuff like "sector 128 on partition 3" and "sector 0 on partition 4" on the same queue, but now each bio is partition mapped before being attached to a request. So bio_rq_in_between() does not assume that all requests are for the same device, but it uses logic that assumes 2.4 behaviour (or, makes most sense there), namely that in the above case sector 0 on partition 4 is assumed to be bigger than last sector on partition 3.
A request for (device, sector) = (1, 50) can be inserted between (0, 10) and (0, 100).
I'll take a look at the 2.5 pktcdvd code, but iirc (and you didn't change that, I doubt it) I made the queues per packet device. This is the way it must be, and the above will not cause any problems. Basically, if you have more than one spindle per queue you are screwed, the io scheduler cannot make good decisions. -- Jens Axboe