xen: Union the blkif_request request specific fields
Prepare for extending the block device ring to allow request specific fields, by moving the request specific fields for reads, writes and barrier requests to a union member. Acked-by: Jens Axboe <jaxboe@fusionio.com> Signed-off-by: Owen Smith <owen.smith@citrix.com> Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
This commit is contained in:
Родитель
c56eb8fb6d
Коммит
51de69523f
|
@ -281,7 +281,7 @@ static int blkif_queue_request(struct request *req)
|
|||
info->shadow[id].request = req;
|
||||
|
||||
ring_req->id = id;
|
||||
ring_req->sector_number = (blkif_sector_t)blk_rq_pos(req);
|
||||
ring_req->u.rw.sector_number = (blkif_sector_t)blk_rq_pos(req);
|
||||
ring_req->handle = info->handle;
|
||||
|
||||
ring_req->operation = rq_data_dir(req) ?
|
||||
|
@ -317,7 +317,7 @@ static int blkif_queue_request(struct request *req)
|
|||
rq_data_dir(req) );
|
||||
|
||||
info->shadow[id].frame[i] = mfn_to_pfn(buffer_mfn);
|
||||
ring_req->seg[i] =
|
||||
ring_req->u.rw.seg[i] =
|
||||
(struct blkif_request_segment) {
|
||||
.gref = ref,
|
||||
.first_sect = fsect,
|
||||
|
@ -615,7 +615,7 @@ static void blkif_completion(struct blk_shadow *s)
|
|||
{
|
||||
int i;
|
||||
for (i = 0; i < s->req.nr_segments; i++)
|
||||
gnttab_end_foreign_access(s->req.seg[i].gref, 0, 0UL);
|
||||
gnttab_end_foreign_access(s->req.u.rw.seg[i].gref, 0, 0UL);
|
||||
}
|
||||
|
||||
static irqreturn_t blkif_interrupt(int irq, void *dev_id)
|
||||
|
@ -932,7 +932,7 @@ static int blkif_recover(struct blkfront_info *info)
|
|||
/* Rewrite any grant references invalidated by susp/resume. */
|
||||
for (j = 0; j < req->nr_segments; j++)
|
||||
gnttab_grant_foreign_access_ref(
|
||||
req->seg[j].gref,
|
||||
req->u.rw.seg[j].gref,
|
||||
info->xbdev->otherend_id,
|
||||
pfn_to_mfn(info->shadow[req->id].frame[j]),
|
||||
rq_data_dir(info->shadow[req->id].request));
|
||||
|
|
|
@ -51,11 +51,7 @@ typedef uint64_t blkif_sector_t;
|
|||
*/
|
||||
#define BLKIF_MAX_SEGMENTS_PER_REQUEST 11
|
||||
|
||||
struct blkif_request {
|
||||
uint8_t operation; /* BLKIF_OP_??? */
|
||||
uint8_t nr_segments; /* number of segments */
|
||||
blkif_vdev_t handle; /* only for read/write requests */
|
||||
uint64_t id; /* private guest value, echoed in resp */
|
||||
struct blkif_request_rw {
|
||||
blkif_sector_t sector_number;/* start sector idx on disk (r/w only) */
|
||||
struct blkif_request_segment {
|
||||
grant_ref_t gref; /* reference to I/O buffer frame */
|
||||
|
@ -65,6 +61,16 @@ struct blkif_request {
|
|||
} seg[BLKIF_MAX_SEGMENTS_PER_REQUEST];
|
||||
};
|
||||
|
||||
struct blkif_request {
|
||||
uint8_t operation; /* BLKIF_OP_??? */
|
||||
uint8_t nr_segments; /* number of segments */
|
||||
blkif_vdev_t handle; /* only for read/write requests */
|
||||
uint64_t id; /* private guest value, echoed in resp */
|
||||
union {
|
||||
struct blkif_request_rw rw;
|
||||
} u;
|
||||
};
|
||||
|
||||
struct blkif_response {
|
||||
uint64_t id; /* copied from request */
|
||||
uint8_t operation; /* copied from request */
|
||||
|
|
Загрузка…
Ссылка в новой задаче