summaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-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 8a3e309e0842..a1e288069e2e 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