From: Nick Piggin 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->elevator.elevator_data; + struct deadline_rq *drq = RQ_DATA(rq); + const int data_dir = rq_data_dir(drq->request); deadline_add_drq_rb(dd, drq); @@ -297,6 +300,13 @@ deadline_add_request(struct deadline_dat */ drq->expires = jiffies + dd->fifo_expire[data_dir]; list_add_tail(&drq->fifo, &dd->fifo_list[data_dir]); + + if (rq_mergeable(rq)) { + deadline_add_drq_hash(dd, drq); + + if (!q->last_merge) + q->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->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->last_merge) - q->last_merge = rq; - } } static int deadline_queue_empty(request_queue_t *q) _