block: share request flush fields with elevator_private
Flush requests are never put on the IO scheduler. Convert request structure's elevator_private* into an array and have the flush fields share a union with it. Reclaim the space lost in 'struct request' by moving 'completion_data' back in the union with 'rb_node'. Signed-off-by: Mike Snitzer <snitzer@redhat.com> Acked-by: Vivek Goyal <vgoyal@redhat.com> Acked-by: Tejun Heo <tj@kernel.org> Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
This commit is contained in:
@ -99,25 +99,26 @@ struct request {
|
||||
/*
|
||||
* The rb_node is only used inside the io scheduler, requests
|
||||
* are pruned when moved to the dispatch queue. So let the
|
||||
* flush fields share space with the rb_node.
|
||||
* completion_data share space with the rb_node.
|
||||
*/
|
||||
union {
|
||||
struct rb_node rb_node; /* sort/lookup */
|
||||
struct {
|
||||
unsigned int seq;
|
||||
struct list_head list;
|
||||
} flush;
|
||||
void *completion_data;
|
||||
};
|
||||
|
||||
void *completion_data;
|
||||
|
||||
/*
|
||||
* Three pointers are available for the IO schedulers, if they need
|
||||
* more they have to dynamically allocate it.
|
||||
* more they have to dynamically allocate it. Flush requests are
|
||||
* never put on the IO scheduler. So let the flush fields share
|
||||
* space with the three elevator_private pointers.
|
||||
*/
|
||||
void *elevator_private;
|
||||
void *elevator_private2;
|
||||
void *elevator_private3;
|
||||
union {
|
||||
void *elevator_private[3];
|
||||
struct {
|
||||
unsigned int seq;
|
||||
struct list_head list;
|
||||
} flush;
|
||||
};
|
||||
|
||||
struct gendisk *rq_disk;
|
||||
unsigned long start_time;
|
||||
|
Reference in New Issue
Block a user