<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">
From: Nick Piggin &lt;piggin@cyberone.com.au&gt;

Fix fallout from Jens' insert_here removal.  Without it its possible that a
request on the dispatch list is on the merge hash as well which is bad.  I
don't _think_ this would happen in any code paths, but I haven't looked too
closely.  It makes the API a bit less fragile anyway.



 drivers/block/deadline-iosched.c |   22 ++++++++++++----------
 1 files changed, 12 insertions(+), 10 deletions(-)

diff -puN drivers/block/deadline-iosched.c~deadline-insert_here-fix drivers/block/deadline-iosched.c
--- 25/drivers/block/deadline-iosched.c~deadline-insert_here-fix	2003-09-17 22:41:21.000000000 -0700
+++ 25-akpm/drivers/block/deadline-iosched.c	2003-09-17 22:41:21.000000000 -0700
@@ -287,8 +287,11 @@ deadline_find_first_drq(struct deadline_
  * add drq to rbtree and fifo
  */
 static inline void
-deadline_add_request(struct deadline_data *dd, struct deadline_rq *drq)
+deadline_add_request(struct request_queue *q, struct request *rq)
 {
+	struct deadline_data *dd = q-&gt;elevator.elevator_data;
+	struct deadline_rq *drq = RQ_DATA(rq);
+
 	const int data_dir = rq_data_dir(drq-&gt;request);
 
 	deadline_add_drq_rb(dd, drq);
@@ -297,6 +300,13 @@ deadline_add_request(struct deadline_dat
 	 */
 	drq-&gt;expires = jiffies + dd-&gt;fifo_expire[data_dir];
 	list_add_tail(&amp;drq-&gt;fifo, &amp;dd-&gt;fifo_list[data_dir]);
+
+	if (rq_mergeable(rq)) {
+		deadline_add_drq_hash(dd, drq);
+
+		if (!q-&gt;last_merge)
+			q-&gt;last_merge = rq;
+	}
 }
 
 /*
@@ -616,7 +626,6 @@ static void
 deadline_insert_request(request_queue_t *q, struct request *rq, int where)
 {
 	struct deadline_data *dd = q-&gt;elevator.elevator_data;
-	struct deadline_rq *drq = RQ_DATA(rq);
 
 	switch (where) {
 		case ELEVATOR_INSERT_BACK:
@@ -629,19 +638,12 @@ deadline_insert_request(request_queue_t 
 			break;
 		case ELEVATOR_INSERT_SORT:
 			BUG_ON(!blk_fs_request(rq));
-			deadline_add_request(dd, drq);
+			deadline_add_request(q, rq);
 			break;
 		default:
 			printk("%s: bad insert point %d\n", __FUNCTION__,where);
 			return;
 	}
-
-	if (rq_mergeable(rq)) {
-		deadline_add_drq_hash(dd, drq);
-
-		if (!q-&gt;last_merge)
-			q-&gt;last_merge = rq;
-	}
 }
 
 static int deadline_queue_empty(request_queue_t *q)

_
</pre></body></html>