summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJens Axboe <axboe@suse.de>2006-08-10 09:00:21 +0200
committerJens Axboe <axboe@nelson.home.kernel.dk>2006-09-30 20:29:35 +0200
commite6a1c874a064e7d07f24986aba7cd537b7f4a25d (patch)
tree35f80d2c96e1d499ecafa0cf435da070ad2ff73c
parent51da90fcb6acd580e87280eaf4eb1f788021807d (diff)
downloadop-kernel-dev-e6a1c874a064e7d07f24986aba7cd537b7f4a25d.zip
op-kernel-dev-e6a1c874a064e7d07f24986aba7cd537b7f4a25d.tar.gz
[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.h20
1 files changed, 13 insertions, 7 deletions
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
index 8a3e309..a1e2880 100644
--- a/include/linux/blkdev.h
+++ b/include/linux/blkdev.h
@@ -211,6 +211,8 @@ struct request {
struct list_head queuelist;
struct list_head donelist;
+ request_queue_t *q;
+
unsigned int cmd_flags;
enum rq_cmd_type_bits cmd_type;
@@ -219,12 +221,12 @@ struct request {
*/
sector_t sector; /* next sector to submit */
+ sector_t hard_sector; /* next sector to complete */
unsigned long nr_sectors; /* no. of sectors left to submit */
+ unsigned long hard_nr_sectors; /* no. of sectors left to complete */
/* no. of sectors left to submit in the current segment */
unsigned int current_nr_sectors;
- sector_t hard_sector; /* next sector to complete */
- unsigned long hard_nr_sectors; /* no. of sectors left to complete */
/* no. of sectors left to complete in the current segment */
unsigned int hard_cur_sectors;
@@ -232,7 +234,15 @@ struct request {
struct bio *biotail;
struct hlist_node hash; /* merge hash */
- struct rb_node rb_node; /* sort/lookup */
+ /*
+ * The rb_node is only used inside the io scheduler, requests
+ * are pruned when moved to the dispatch queue. So let the
+ * completion_data share space with the rb_node.
+ */
+ union {
+ struct rb_node rb_node; /* sort/lookup */
+ void *completion_data;
+ };
/*
* two pointers are available for the IO schedulers, if they need
@@ -241,8 +251,6 @@ struct request {
void *elevator_private;
void *elevator_private2;
- void *completion_data;
-
struct gendisk *rq_disk;
unsigned long start_time;
@@ -260,8 +268,6 @@ struct request {
unsigned short ioprio;
- request_queue_t *q;
-
void *special;
char *buffer;
OpenPOWER on IntegriCloud