--- a/drivers/block/cfq-iosched.c~ 2003-05-28 11:50:32.220453272 +0200 +++ a/drivers/block/cfq-iosched.c 2003-05-28 11:51:38.245415952 +0200 @@ -105,6 +105,14 @@ __cfq_del_crq_hash(crq); } +static void cfq_remove_merge_hints(request_queue_t *q, struct cfq_rq *crq) +{ + cfq_del_crq_hash(crq); + + if (q->last_merge == &crq->request->queuelist) + q->last_merge = NULL; +} + static inline void cfq_add_crq_hash(struct cfq_data *cfqd, struct cfq_rq *crq) { struct request *rq = crq->request; @@ -235,7 +243,7 @@ if (crq) { struct cfq_queue *cfqq = crq->cfq_queue; - cfq_del_crq_hash(crq); + cfq_remove_merge_hints(q, crq); if (cfqq) { cfq_del_crq_rb(cfqq, crq);