--- 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);