diff options
| -rw-r--r-- | drivers/block/xen-blkfront.c | 8 | ||||
| -rw-r--r-- | include/xen/interface/io/blkif.h | 16 |
2 files changed, 15 insertions, 9 deletions
diff --git a/drivers/block/xen-blkfront.c b/drivers/block/xen-blkfront.c index d7aa39e349a6..cc4514c9d8a6 100644 --- a/drivers/block/xen-blkfront.c +++ b/drivers/block/xen-blkfront.c | |||
| @@ -281,7 +281,7 @@ static int blkif_queue_request(struct request *req) | |||
| 281 | info->shadow[id].request = req; | 281 | info->shadow[id].request = req; |
| 282 | 282 | ||
| 283 | ring_req->id = id; | 283 | ring_req->id = id; |
| 284 | ring_req->sector_number = (blkif_sector_t)blk_rq_pos(req); | 284 | ring_req->u.rw.sector_number = (blkif_sector_t)blk_rq_pos(req); |
| 285 | ring_req->handle = info->handle; | 285 | ring_req->handle = info->handle; |
| 286 | 286 | ||
| 287 | ring_req->operation = rq_data_dir(req) ? | 287 | ring_req->operation = rq_data_dir(req) ? |
| @@ -317,7 +317,7 @@ static int blkif_queue_request(struct request *req) | |||
| 317 | rq_data_dir(req) ); | 317 | rq_data_dir(req) ); |
| 318 | 318 | ||
| 319 | info->shadow[id].frame[i] = mfn_to_pfn(buffer_mfn); | 319 | info->shadow[id].frame[i] = mfn_to_pfn(buffer_mfn); |
| 320 | ring_req->seg[i] = | 320 | ring_req->u.rw.seg[i] = |
| 321 | (struct blkif_request_segment) { | 321 | (struct blkif_request_segment) { |
| 322 | .gref = ref, | 322 | .gref = ref, |
| 323 | .first_sect = fsect, | 323 | .first_sect = fsect, |
| @@ -615,7 +615,7 @@ static void blkif_completion(struct blk_shadow *s) | |||
| 615 | { | 615 | { |
| 616 | int i; | 616 | int i; |
| 617 | for (i = 0; i < s->req.nr_segments; i++) | 617 | for (i = 0; i < s->req.nr_segments; i++) |
| 618 | gnttab_end_foreign_access(s->req.seg[i].gref, 0, 0UL); | 618 | gnttab_end_foreign_access(s->req.u.rw.seg[i].gref, 0, 0UL); |
| 619 | } | 619 | } |
| 620 | 620 | ||
| 621 | static irqreturn_t blkif_interrupt(int irq, void *dev_id) | 621 | static irqreturn_t blkif_interrupt(int irq, void *dev_id) |
| @@ -932,7 +932,7 @@ static int blkif_recover(struct blkfront_info *info) | |||
| 932 | /* Rewrite any grant references invalidated by susp/resume. */ | 932 | /* Rewrite any grant references invalidated by susp/resume. */ |
| 933 | for (j = 0; j < req->nr_segments; j++) | 933 | for (j = 0; j < req->nr_segments; j++) |
| 934 | gnttab_grant_foreign_access_ref( | 934 | gnttab_grant_foreign_access_ref( |
| 935 | req->seg[j].gref, | 935 | req->u.rw.seg[j].gref, |
| 936 | info->xbdev->otherend_id, | 936 | info->xbdev->otherend_id, |
| 937 | pfn_to_mfn(info->shadow[req->id].frame[j]), | 937 | pfn_to_mfn(info->shadow[req->id].frame[j]), |
| 938 | rq_data_dir(info->shadow[req->id].request)); | 938 | rq_data_dir(info->shadow[req->id].request)); |
diff --git a/include/xen/interface/io/blkif.h b/include/xen/interface/io/blkif.h index c2d1fa4dc1ee..e4f743cfa151 100644 --- a/include/xen/interface/io/blkif.h +++ b/include/xen/interface/io/blkif.h | |||
| @@ -51,11 +51,7 @@ typedef uint64_t blkif_sector_t; | |||
| 51 | */ | 51 | */ |
| 52 | #define BLKIF_MAX_SEGMENTS_PER_REQUEST 11 | 52 | #define BLKIF_MAX_SEGMENTS_PER_REQUEST 11 |
| 53 | 53 | ||
| 54 | struct blkif_request { | 54 | struct blkif_request_rw { |
| 55 | uint8_t operation; /* BLKIF_OP_??? */ | ||
| 56 | uint8_t nr_segments; /* number of segments */ | ||
| 57 | blkif_vdev_t handle; /* only for read/write requests */ | ||
| 58 | uint64_t id; /* private guest value, echoed in resp */ | ||
| 59 | blkif_sector_t sector_number;/* start sector idx on disk (r/w only) */ | 55 | blkif_sector_t sector_number;/* start sector idx on disk (r/w only) */ |
| 60 | struct blkif_request_segment { | 56 | struct blkif_request_segment { |
| 61 | grant_ref_t gref; /* reference to I/O buffer frame */ | 57 | grant_ref_t gref; /* reference to I/O buffer frame */ |
| @@ -65,6 +61,16 @@ struct blkif_request { | |||
| 65 | } seg[BLKIF_MAX_SEGMENTS_PER_REQUEST]; | 61 | } seg[BLKIF_MAX_SEGMENTS_PER_REQUEST]; |
| 66 | }; | 62 | }; |
| 67 | 63 | ||
| 64 | struct blkif_request { | ||
| 65 | uint8_t operation; /* BLKIF_OP_??? */ | ||
| 66 | uint8_t nr_segments; /* number of segments */ | ||
| 67 | blkif_vdev_t handle; /* only for read/write requests */ | ||
| 68 | uint64_t id; /* private guest value, echoed in resp */ | ||
| 69 | union { | ||
| 70 | struct blkif_request_rw rw; | ||
| 71 | } u; | ||
| 72 | }; | ||
| 73 | |||
| 68 | struct blkif_response { | 74 | struct blkif_response { |
| 69 | uint64_t id; /* copied from request */ | 75 | uint64_t id; /* copied from request */ |
| 70 | uint8_t operation; /* copied from request */ | 76 | uint8_t operation; /* copied from request */ |
