diff options
author | Jens Axboe <axboe@suse.de> | 2006-08-10 03:00:21 -0400 |
---|---|---|
committer | Jens Axboe <axboe@nelson.home.kernel.dk> | 2006-09-30 14:29:35 -0400 |
commit | e6a1c874a064e7d07f24986aba7cd537b7f4a25d (patch) | |
tree | 35f80d2c96e1d499ecafa0cf435da070ad2ff73c | |
parent | 51da90fcb6acd580e87280eaf4eb1f788021807d (diff) |
[PATCH] struct request: shrink and optimize some more
Move some members around and unionize completion_data and rb_node since
they cannot ever be used at the same time.
Signed-off-by: Jens Axboe <axboe@suse.de>
-rw-r--r-- | include/linux/blkdev.h | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h index 8a3e309e0842..a1e288069e2e 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h | |||
@@ -211,6 +211,8 @@ struct request { | |||
211 | struct list_head queuelist; | 211 | struct list_head queuelist; |
212 | struct list_head donelist; | 212 | struct list_head donelist; |
213 | 213 | ||
214 | request_queue_t *q; | ||
215 | |||
214 | unsigned int cmd_flags; | 216 | unsigned int cmd_flags; |
215 | enum rq_cmd_type_bits cmd_type; | 217 | enum rq_cmd_type_bits cmd_type; |
216 | 218 | ||
@@ -219,12 +221,12 @@ struct request { | |||
219 | */ | 221 | */ |
220 | 222 | ||
221 | sector_t sector; /* next sector to submit */ | 223 | sector_t sector; /* next sector to submit */ |
224 | sector_t hard_sector; /* next sector to complete */ | ||
222 | unsigned long nr_sectors; /* no. of sectors left to submit */ | 225 | unsigned long nr_sectors; /* no. of sectors left to submit */ |
226 | unsigned long hard_nr_sectors; /* no. of sectors left to complete */ | ||
223 | /* no. of sectors left to submit in the current segment */ | 227 | /* no. of sectors left to submit in the current segment */ |
224 | unsigned int current_nr_sectors; | 228 | unsigned int current_nr_sectors; |
225 | 229 | ||
226 | sector_t hard_sector; /* next sector to complete */ | ||
227 | unsigned long hard_nr_sectors; /* no. of sectors left to complete */ | ||
228 | /* no. of sectors left to complete in the current segment */ | 230 | /* no. of sectors left to complete in the current segment */ |
229 | unsigned int hard_cur_sectors; | 231 | unsigned int hard_cur_sectors; |
230 | 232 | ||
@@ -232,7 +234,15 @@ struct request { | |||
232 | struct bio *biotail; | 234 | struct bio *biotail; |
233 | 235 | ||
234 | struct hlist_node hash; /* merge hash */ | 236 | struct hlist_node hash; /* merge hash */ |
235 | struct rb_node rb_node; /* sort/lookup */ | 237 | /* |
238 | * The rb_node is only used inside the io scheduler, requests | ||
239 | * are pruned when moved to the dispatch queue. So let the | ||
240 | * completion_data share space with the rb_node. | ||
241 | */ | ||
242 | union { | ||
243 | struct rb_node rb_node; /* sort/lookup */ | ||
244 | void *completion_data; | ||
245 | }; | ||
236 | 246 | ||
237 | /* | 247 | /* |
238 | * two pointers are available for the IO schedulers, if they need | 248 | * two pointers are available for the IO schedulers, if they need |
@@ -241,8 +251,6 @@ struct request { | |||
241 | void *elevator_private; | 251 | void *elevator_private; |
242 | void *elevator_private2; | 252 | void *elevator_private2; |
243 | 253 | ||
244 | void *completion_data; | ||
245 | |||
246 | struct gendisk *rq_disk; | 254 | struct gendisk *rq_disk; |
247 | unsigned long start_time; | 255 | unsigned long start_time; |
248 | 256 | ||
@@ -260,8 +268,6 @@ struct request { | |||
260 | 268 | ||
261 | unsigned short ioprio; | 269 | unsigned short ioprio; |
262 | 270 | ||
263 | request_queue_t *q; | ||
264 | |||
265 | void *special; | 271 | void *special; |
266 | char *buffer; | 272 | char *buffer; |
267 | 273 | ||