History

block: Stop abusing csd.list for fifo_time

Block layer currently abuses rq->csd.list.next for storing fifo_time. That is a terrible hack and completely unnecessary as well. Union achieves the same space saving in a cleaner way.

Jan Kara committed 12 years ago

Commit 8b4922d1 parent bf36f9c4 files · +9 −14Browse files

Unified · Split

4 files
  1. block/cfq-iosched.c +4 −4
  2. block/deadline-iosched.c +4 −4
  3. include/linux/blkdev.h +1 −0
  4. include/linux/elevator.h +0 −6
block/cfq-iosched.c+4−4
@@ -2367,10 +2367,10 @@ cfq_merged_requests(struct request_queue *q, struct request *rq, · 2366 unmodified lines
23672367 * reposition in fifo if next is older than rq
23682368 */
23692369 if (!list_empty(&rq->queuelist) && !list_empty(&next->queuelist) &&
2370− time_before(rq_fifo_time(next), rq_fifo_time(rq)) &&
2370+ time_before(next->fifo_time, rq->fifo_time) &&
23712371 cfqq == RQ_CFQQ(next)) {
23722372 list_move(&rq->queuelist, &next->queuelist);
2373− rq_set_fifo_time(rq, rq_fifo_time(next));
2373+ rq->fifo_time = next->fifo_time;
23742374 }
23752375
23762376 if (cfqq->next_rq == next)
@@ -2814,7 +2814,7 @@ static struct request *cfq_check_fifo(struct cfq_queue *cfqq) · 437 unmodified lines
28142814 return NULL;
28152815
28162816 rq = rq_entry_fifo(cfqq->fifo.next);
2817− if (time_before(jiffies, rq_fifo_time(rq)))
2817+ if (time_before(jiffies, rq->fifo_time))
28182818 rq = NULL;
28192819
28202820 cfq_log_cfqq(cfqq->cfqd, cfqq, "fifo=%p", rq);
@@ -3927,7 +3927,7 @@ static void cfq_insert_request(struct request_queue *q, struct request *rq) · 1106 unmodified lines
39273927 cfq_log_cfqq(cfqd, cfqq, "insert_request");
39283928 cfq_init_prio_data(cfqq, RQ_CIC(rq));
39293929
3930− rq_set_fifo_time(rq, jiffies + cfqd->cfq_fifo_expire[rq_is_sync(rq)]);
3930+ rq->fifo_time = jiffies + cfqd->cfq_fifo_expire[rq_is_sync(rq)];
39313931 list_add_tail(&rq->queuelist, &cfqq->fifo);
39323932 cfq_add_rq_rb(rq);
39333933 cfqg_stats_update_io_add(RQ_CFQG(rq), cfqd->serving_group,
block/deadline-iosched.c+4−4
@@ -106,7 +106,7 @@ deadline_add_request(struct request_queue *q, struct request *rq) · 105 unmodified lines
106106 /*
107107 * set expire time and add to fifo list
108108 */
109− rq_set_fifo_time(rq, jiffies + dd->fifo_expire[data_dir]);
109+ rq->fifo_time = jiffies + dd->fifo_expire[data_dir];
110110 list_add_tail(&rq->queuelist, &dd->fifo_list[data_dir]);
111111 }
112112
@@ -174,9 +174,9 @@ deadline_merged_requests(struct request_queue *q, struct request *req, · 61 unmodified lines
174174 * and move into next position (next will be deleted) in fifo
175175 */
176176 if (!list_empty(&req->queuelist) && !list_empty(&next->queuelist)) {
177− if (time_before(rq_fifo_time(next), rq_fifo_time(req))) {
177+ if (time_before(next->fifo_time, req->fifo_time)) {
178178 list_move(&req->queuelist, &next->queuelist);
179− rq_set_fifo_time(req, rq_fifo_time(next));
179+ req->fifo_time = next->fifo_time;
180180 }
181181 }
182182
@@ -230,7 +230,7 @@ static inline int deadline_check_fifo(struct deadline_data *dd, int ddir) · 47 unmodified lines
230230 /*
231231 * rq is expired!
232232 */
233− if (time_after_eq(jiffies, rq_fifo_time(rq)))
233+ if (time_after_eq(jiffies, rq->fifo_time))
234234 return 1;
235235
236236 return 0;
include/linux/blkdev.h+1−0
@@ -99,6 +99,7 @@ struct request { · 98 unmodified lines
9999 union {
100100 struct call_single_data csd;
101101 struct work_struct mq_flush_work;
102+ unsigned long fifo_time;
102103 };
103104
104105 struct request_queue *q;
include/linux/elevator.h+0−6
@@ -202,12 +202,6 @@ enum { · 201 unmodified lines
202202 #define rq_end_sector(rq) (blk_rq_pos(rq) + blk_rq_sectors(rq))
203203 #define rb_entry_rq(node) rb_entry((node), struct request, rb_node)
204204
205−/*
206− * Hack to reuse the csd.list list_head as the fifo time holder while
207− * the request is in the io scheduler. Saves an unsigned long in rq.
208− */
209−#define rq_fifo_time(rq) ((unsigned long) (rq)->csd.list.next)
210−#define rq_set_fifo_time(rq,exp) ((rq)->csd.list.next = (void *) (exp))
211205 #define rq_entry_fifo(ptr) list_entry((ptr), struct request, queuelist)
212206 #define rq_fifo_clear(rq) do { \
213207 list_del_init(&(rq)->queuelist); \