--- a/drivers/block/as-iosched.c~	2003-05-28 10:46:47.509897656 +0200
+++ a/drivers/block/as-iosched.c	2003-05-28 11:51:10.628614344 +0200
@@ -325,6 +325,14 @@
 		__as_del_arq_hash(arq);
 }
 
+static void as_remove_merge_hints(request_queue_t *q, struct as_rq *arq)
+{
+	as_del_arq_hash(arq);
+
+	if (q->last_merge == &arq->request->queuelist)
+		q->last_merge = NULL;
+}
+
 static void as_add_arq_hash(struct as_data *ad, struct as_rq *arq)
 {
 	struct request *rq = arq->request;
@@ -993,7 +1001,7 @@
 			ad->next_arq[data_dir] = as_find_next_arq(ad, arq);
 		
 		list_del_init(&arq->fifo);
-		as_del_arq_hash(arq);
+		as_remove_merge_hints(q, arq);
 		as_del_arq_rb(ad, arq);
 	}