aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/block/deadline-iosched.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/block/deadline-iosched.c')
-rw-r--r--drivers/block/deadline-iosched.c30
1 files changed, 2 insertions, 28 deletions
diff --git a/drivers/block/deadline-iosched.c b/drivers/block/deadline-iosched.c
index 07de4d24ddba..43d93155efb8 100644
--- a/drivers/block/deadline-iosched.c
+++ b/drivers/block/deadline-iosched.c
@@ -112,15 +112,6 @@ static inline void deadline_del_drq_hash(struct deadline_rq *drq)
112 __deadline_del_drq_hash(drq); 112 __deadline_del_drq_hash(drq);
113} 113}
114 114
115static void
116deadline_remove_merge_hints(request_queue_t *q, struct deadline_rq *drq)
117{
118 deadline_del_drq_hash(drq);
119
120 if (q->last_merge == drq->request)
121 q->last_merge = NULL;
122}
123
124static inline void 115static inline void
125deadline_add_drq_hash(struct deadline_data *dd, struct deadline_rq *drq) 116deadline_add_drq_hash(struct deadline_data *dd, struct deadline_rq *drq)
126{ 117{
@@ -299,12 +290,8 @@ deadline_add_request(struct request_queue *q, struct request *rq)
299 drq->expires = jiffies + dd->fifo_expire[data_dir]; 290 drq->expires = jiffies + dd->fifo_expire[data_dir];
300 list_add_tail(&drq->fifo, &dd->fifo_list[data_dir]); 291 list_add_tail(&drq->fifo, &dd->fifo_list[data_dir]);
301 292
302 if (rq_mergeable(rq)) { 293 if (rq_mergeable(rq))
303 deadline_add_drq_hash(dd, drq); 294 deadline_add_drq_hash(dd, drq);
304
305 if (!q->last_merge)
306 q->last_merge = rq;
307 }
308} 295}
309 296
310/* 297/*
@@ -316,8 +303,8 @@ static void deadline_remove_request(request_queue_t *q, struct request *rq)
316 struct deadline_data *dd = q->elevator->elevator_data; 303 struct deadline_data *dd = q->elevator->elevator_data;
317 304
318 list_del_init(&drq->fifo); 305 list_del_init(&drq->fifo);
319 deadline_remove_merge_hints(q, drq);
320 deadline_del_drq_rb(dd, drq); 306 deadline_del_drq_rb(dd, drq);
307 deadline_del_drq_hash(drq);
321} 308}
322 309
323static int 310static int
@@ -328,15 +315,6 @@ deadline_merge(request_queue_t *q, struct request **req, struct bio *bio)
328 int ret; 315 int ret;
329 316
330 /* 317 /*
331 * try last_merge to avoid going to hash
332 */
333 ret = elv_try_last_merge(q, bio);
334 if (ret != ELEVATOR_NO_MERGE) {
335 __rq = q->last_merge;
336 goto out_insert;
337 }
338
339 /*
340 * see if the merge hash can satisfy a back merge 318 * see if the merge hash can satisfy a back merge
341 */ 319 */
342 __rq = deadline_find_drq_hash(dd, bio->bi_sector); 320 __rq = deadline_find_drq_hash(dd, bio->bi_sector);
@@ -368,8 +346,6 @@ deadline_merge(request_queue_t *q, struct request **req, struct bio *bio)
368 346
369 return ELEVATOR_NO_MERGE; 347 return ELEVATOR_NO_MERGE;
370out: 348out:
371 q->last_merge = __rq;
372out_insert:
373 if (ret) 349 if (ret)
374 deadline_hot_drq_hash(dd, RQ_DATA(__rq)); 350 deadline_hot_drq_hash(dd, RQ_DATA(__rq));
375 *req = __rq; 351 *req = __rq;
@@ -394,8 +370,6 @@ static void deadline_merged_request(request_queue_t *q, struct request *req)
394 deadline_del_drq_rb(dd, drq); 370 deadline_del_drq_rb(dd, drq);
395 deadline_add_drq_rb(dd, drq); 371 deadline_add_drq_rb(dd, drq);
396 } 372 }
397
398 q->last_merge = req;
399} 373}
400 374
401static void 375static void