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:
		
					parent
					
						
							
								c56eb8fb6d
							
						
					
				
			
			
				commit
				
					
						51de69523f
					
				
			
		
					 2 changed files with 15 additions and 9 deletions
				
			
		| 
						 | 
				
			
			@ -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 */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue