Messages in this thread | | | Date | Sun, 4 Oct 2009 22:54:44 +0200 | Subject | bug in elevator/cfq regarding start_time? | From | Corrado Zoccolo <> |
| |
Hi Jens, I found that the start_time is not monotonic in the cfqq fifo_list. The problem seems to be that: * attempt_merge overrides one of the start_time: if (time_after(req->start_time, next->start_time)) req->start_time = next->start_time; * then it calls elv_merge_requests, that in turn invokes cfq's elevator_merge_req_fn, i.e. cfq_merged_requests * cfq_merged_requests checks start_times to decide whether requests need to be repositioned if (!list_empty(&rq->queuelist) && !list_empty(&next->queuelist) && time_before(next->start_time, rq->start_time)) list_move(&rq->queuelist, &next->queuelist);
Other I/O schedulers are not affected, since none of them uses start_time explicitly, but they have a copy in one of the private fields.
Corrado
-- __________________________________________________________________________
dott. Corrado Zoccolo mailto:czoccolo@gmail.com PhD - Department of Computer Science - University of Pisa, Italy --------------------------------------------------------------------------
| |