block CFQ: avoid moving request to different queue
request is queued in cfqq->fifo list. Looks it's possible we are moving a request from one cfqq to another in request merge case. In such case, adjusting the fifo list order doesn't make sense and is impossible if we don't iterate the whole fifo list. My test does hit one case the two cfqq are different, but didn't cause kernel crash, maybe it's because fifo list isn't used frequently. Anyway, from the code logic, this is buggy. I thought we can re-enable the recusive merge logic after this is fixed. Signed-off-by: Shaohua Li <shli@fusionio.com> Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
Родитель
3d70f8c617
Коммит
3d106fba2e
|
@ -1973,7 +1973,8 @@ cfq_merged_requests(struct request_queue *q, struct request *rq,
|
|||
* reposition in fifo if next is older than rq
|
||||
*/
|
||||
if (!list_empty(&rq->queuelist) && !list_empty(&next->queuelist) &&
|
||||
time_before(rq_fifo_time(next), rq_fifo_time(rq))) {
|
||||
time_before(rq_fifo_time(next), rq_fifo_time(rq)) &&
|
||||
cfqq == RQ_CFQQ(next)) {
|
||||
list_move(&rq->queuelist, &next->queuelist);
|
||||
rq_set_fifo_time(rq, rq_fifo_time(next));
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче