diff options
| author | Jan Kara <jack@suse.cz> | 2014-02-24 10:39:52 -0500 |
|---|---|---|
| committer | Jens Axboe <axboe@fb.com> | 2014-02-24 17:46:32 -0500 |
| commit | 8b4922d3173d2eee7b43be8e5caec3ab7d30feff (patch) | |
| tree | 171fd625657933067d47b0ef0a29f10443a21c81 | |
| parent | bf36f9cfa6d3d129387b9d62f495d978ed4ade7c (diff) | |
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.
Signed-off-by: Jan Kara <jack@suse.cz>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Christoph Hellwig <hch@infradead.org>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Jens Axboe <axboe@fb.com>
Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
| -rw-r--r-- | block/cfq-iosched.c | 8 | ||||
| -rw-r--r-- | block/deadline-iosched.c | 8 | ||||
| -rw-r--r-- | include/linux/blkdev.h | 1 | ||||
| -rw-r--r-- | include/linux/elevator.h | 6 |
4 files changed, 9 insertions, 14 deletions
diff --git a/block/cfq-iosched.c b/block/cfq-iosched.c index 744833b630c6..5873e4ada9eb 100644 --- a/block/cfq-iosched.c +++ b/block/cfq-iosched.c | |||
| @@ -2367,10 +2367,10 @@ cfq_merged_requests(struct request_queue *q, struct request *rq, | |||
| 2367 | * reposition in fifo if next is older than rq | 2367 | * reposition in fifo if next is older than rq |
| 2368 | */ | 2368 | */ |
| 2369 | if (!list_empty(&rq->queuelist) && !list_empty(&next->queuelist) && | 2369 | 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) && |
| 2371 | cfqq == RQ_CFQQ(next)) { | 2371 | cfqq == RQ_CFQQ(next)) { |
| 2372 | list_move(&rq->queuelist, &next->queuelist); | 2372 | list_move(&rq->queuelist, &next->queuelist); |
| 2373 | rq_set_fifo_time(rq, rq_fifo_time(next)); | 2373 | rq->fifo_time = next->fifo_time; |
| 2374 | } | 2374 | } |
| 2375 | 2375 | ||
| 2376 | if (cfqq->next_rq == next) | 2376 | if (cfqq->next_rq == next) |
| @@ -2814,7 +2814,7 @@ static struct request *cfq_check_fifo(struct cfq_queue *cfqq) | |||
| 2814 | return NULL; | 2814 | return NULL; |
| 2815 | 2815 | ||
| 2816 | rq = rq_entry_fifo(cfqq->fifo.next); | 2816 | rq = rq_entry_fifo(cfqq->fifo.next); |
| 2817 | if (time_before(jiffies, rq_fifo_time(rq))) | 2817 | if (time_before(jiffies, rq->fifo_time)) |
| 2818 | rq = NULL; | 2818 | rq = NULL; |
| 2819 | 2819 | ||
| 2820 | cfq_log_cfqq(cfqq->cfqd, cfqq, "fifo=%p", rq); | 2820 | 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) | |||
| 3927 | cfq_log_cfqq(cfqd, cfqq, "insert_request"); | 3927 | cfq_log_cfqq(cfqd, cfqq, "insert_request"); |
| 3928 | cfq_init_prio_data(cfqq, RQ_CIC(rq)); | 3928 | cfq_init_prio_data(cfqq, RQ_CIC(rq)); |
| 3929 | 3929 | ||
| 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)]; |
| 3931 | list_add_tail(&rq->queuelist, &cfqq->fifo); | 3931 | list_add_tail(&rq->queuelist, &cfqq->fifo); |
| 3932 | cfq_add_rq_rb(rq); | 3932 | cfq_add_rq_rb(rq); |
| 3933 | cfqg_stats_update_io_add(RQ_CFQG(rq), cfqd->serving_group, | 3933 | cfqg_stats_update_io_add(RQ_CFQG(rq), cfqd->serving_group, |
diff --git a/block/deadline-iosched.c b/block/deadline-iosched.c index 9ef66406c625..a753df2b3fc2 100644 --- a/block/deadline-iosched.c +++ b/block/deadline-iosched.c | |||
| @@ -106,7 +106,7 @@ deadline_add_request(struct request_queue *q, struct request *rq) | |||
| 106 | /* | 106 | /* |
| 107 | * set expire time and add to fifo list | 107 | * set expire time and add to fifo list |
| 108 | */ | 108 | */ |
| 109 | rq_set_fifo_time(rq, jiffies + dd->fifo_expire[data_dir]); | 109 | rq->fifo_time = jiffies + dd->fifo_expire[data_dir]; |
| 110 | list_add_tail(&rq->queuelist, &dd->fifo_list[data_dir]); | 110 | list_add_tail(&rq->queuelist, &dd->fifo_list[data_dir]); |
| 111 | } | 111 | } |
| 112 | 112 | ||
| @@ -174,9 +174,9 @@ deadline_merged_requests(struct request_queue *q, struct request *req, | |||
| 174 | * and move into next position (next will be deleted) in fifo | 174 | * and move into next position (next will be deleted) in fifo |
| 175 | */ | 175 | */ |
| 176 | if (!list_empty(&req->queuelist) && !list_empty(&next->queuelist)) { | 176 | 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)) { |
| 178 | list_move(&req->queuelist, &next->queuelist); | 178 | list_move(&req->queuelist, &next->queuelist); |
| 179 | rq_set_fifo_time(req, rq_fifo_time(next)); | 179 | req->fifo_time = next->fifo_time; |
| 180 | } | 180 | } |
| 181 | } | 181 | } |
| 182 | 182 | ||
| @@ -230,7 +230,7 @@ static inline int deadline_check_fifo(struct deadline_data *dd, int ddir) | |||
| 230 | /* | 230 | /* |
| 231 | * rq is expired! | 231 | * rq is expired! |
| 232 | */ | 232 | */ |
| 233 | if (time_after_eq(jiffies, rq_fifo_time(rq))) | 233 | if (time_after_eq(jiffies, rq->fifo_time)) |
| 234 | return 1; | 234 | return 1; |
| 235 | 235 | ||
| 236 | return 0; | 236 | return 0; |
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h index 4afa4f8f6090..1e1fa3f93d5f 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h | |||
| @@ -99,6 +99,7 @@ struct request { | |||
| 99 | union { | 99 | union { |
| 100 | struct call_single_data csd; | 100 | struct call_single_data csd; |
| 101 | struct work_struct mq_flush_work; | 101 | struct work_struct mq_flush_work; |
| 102 | unsigned long fifo_time; | ||
| 102 | }; | 103 | }; |
| 103 | 104 | ||
| 104 | struct request_queue *q; | 105 | struct request_queue *q; |
diff --git a/include/linux/elevator.h b/include/linux/elevator.h index 306dd8cd0b6f..0bdfd46f4735 100644 --- a/include/linux/elevator.h +++ b/include/linux/elevator.h | |||
| @@ -202,12 +202,6 @@ enum { | |||
| 202 | #define rq_end_sector(rq) (blk_rq_pos(rq) + blk_rq_sectors(rq)) | 202 | #define rq_end_sector(rq) (blk_rq_pos(rq) + blk_rq_sectors(rq)) |
| 203 | #define rb_entry_rq(node) rb_entry((node), struct request, rb_node) | 203 | #define rb_entry_rq(node) rb_entry((node), struct request, rb_node) |
| 204 | 204 | ||
| 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)) | ||
| 211 | #define rq_entry_fifo(ptr) list_entry((ptr), struct request, queuelist) | 205 | #define rq_entry_fifo(ptr) list_entry((ptr), struct request, queuelist) |
| 212 | #define rq_fifo_clear(rq) do { \ | 206 | #define rq_fifo_clear(rq) do { \ |
| 213 | list_del_init(&(rq)->queuelist); \ | 207 | list_del_init(&(rq)->queuelist); \ |
