Commit 51de6952 authored by Owen Smith's avatar Owen Smith Committed by Konrad Rzeszutek Wilk

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: default avatarJens Axboe <jaxboe@fusionio.com>
Signed-off-by: default avatarOwen Smith <owen.smith@citrix.com>
Signed-off-by: default avatarKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
parent c56eb8fb
...@@ -281,7 +281,7 @@ static int blkif_queue_request(struct request *req) ...@@ -281,7 +281,7 @@ static int blkif_queue_request(struct request *req)
info->shadow[id].request = req; info->shadow[id].request = req;
ring_req->id = id; 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->handle = info->handle;
ring_req->operation = rq_data_dir(req) ? ring_req->operation = rq_data_dir(req) ?
...@@ -317,7 +317,7 @@ static int blkif_queue_request(struct request *req) ...@@ -317,7 +317,7 @@ static int blkif_queue_request(struct request *req)
rq_data_dir(req) ); rq_data_dir(req) );
info->shadow[id].frame[i] = mfn_to_pfn(buffer_mfn); info->shadow[id].frame[i] = mfn_to_pfn(buffer_mfn);
ring_req->seg[i] = ring_req->u.rw.seg[i] =
(struct blkif_request_segment) { (struct blkif_request_segment) {
.gref = ref, .gref = ref,
.first_sect = fsect, .first_sect = fsect,
...@@ -615,7 +615,7 @@ static void blkif_completion(struct blk_shadow *s) ...@@ -615,7 +615,7 @@ static void blkif_completion(struct blk_shadow *s)
{ {
int i; int i;
for (i = 0; i < s->req.nr_segments; 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) static irqreturn_t blkif_interrupt(int irq, void *dev_id)
...@@ -932,7 +932,7 @@ static int blkif_recover(struct blkfront_info *info) ...@@ -932,7 +932,7 @@ static int blkif_recover(struct blkfront_info *info)
/* Rewrite any grant references invalidated by susp/resume. */ /* Rewrite any grant references invalidated by susp/resume. */
for (j = 0; j < req->nr_segments; j++) for (j = 0; j < req->nr_segments; j++)
gnttab_grant_foreign_access_ref( gnttab_grant_foreign_access_ref(
req->seg[j].gref, req->u.rw.seg[j].gref,
info->xbdev->otherend_id, info->xbdev->otherend_id,
pfn_to_mfn(info->shadow[req->id].frame[j]), pfn_to_mfn(info->shadow[req->id].frame[j]),
rq_data_dir(info->shadow[req->id].request)); rq_data_dir(info->shadow[req->id].request));
......
...@@ -51,11 +51,7 @@ typedef uint64_t blkif_sector_t; ...@@ -51,11 +51,7 @@ typedef uint64_t blkif_sector_t;
*/ */
#define BLKIF_MAX_SEGMENTS_PER_REQUEST 11 #define BLKIF_MAX_SEGMENTS_PER_REQUEST 11
struct blkif_request { struct blkif_request_rw {
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 */
blkif_sector_t sector_number;/* start sector idx on disk (r/w only) */ blkif_sector_t sector_number;/* start sector idx on disk (r/w only) */
struct blkif_request_segment { struct blkif_request_segment {
grant_ref_t gref; /* reference to I/O buffer frame */ grant_ref_t gref; /* reference to I/O buffer frame */
...@@ -65,6 +61,16 @@ struct blkif_request { ...@@ -65,6 +61,16 @@ struct blkif_request {
} seg[BLKIF_MAX_SEGMENTS_PER_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 { struct blkif_response {
uint64_t id; /* copied from request */ uint64_t id; /* copied from request */
uint8_t operation; /* copied from request */ uint8_t operation; /* copied from request */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment