[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v3 2/2] xen: fix qdisk BLKIF_OP_DISCARD for 32/64 word size mix
On Mon, 20 Jun 2016, Juergen Gross wrote: > In case the word size of the domU and qemu running the qdisk backend > differ BLKIF_OP_DISCARD will not work reliably, as the request > structure in the ring have different layouts for different word size. > > Correct this by copying the request structure in case of different > word size element by element in the BLKIF_OP_DISCARD case, too. > > Signed-off-by: Juergen Gross <jgross@xxxxxxxx> Acked-by: Stefano Stabellini <sstabellini@xxxxxxxxxx> > hw/block/xen_blkif.h | 20 ++++++++++++++++++-- > 1 file changed, 18 insertions(+), 2 deletions(-) > > diff --git a/hw/block/xen_blkif.h b/hw/block/xen_blkif.h > index 7ccf92e..0738684 100644 > --- a/hw/block/xen_blkif.h > +++ b/hw/block/xen_blkif.h > @@ -28,6 +28,14 @@ struct blkif_x86_32_request { > blkif_sector_t sector_number; /* start sector idx on disk (r/w only) > */ > struct blkif_request_segment seg[BLKIF_MAX_SEGMENTS_PER_REQUEST]; > }; > +struct blkif_x86_32_request_discard { > + uint8_t operation; /* BLKIF_OP_DISCARD > */ > + uint8_t flag; /* nr_segments in request struct > */ > + 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) > */ > + uint64_t nr_sectors; /* # of contiguous sectors to discard > */ > +}; > struct blkif_x86_32_response { > uint64_t id; /* copied from request */ > uint8_t operation; /* copied from request */ > @@ -46,6 +54,14 @@ struct blkif_x86_64_request { > blkif_sector_t sector_number; /* start sector idx on disk (r/w only) > */ > struct blkif_request_segment seg[BLKIF_MAX_SEGMENTS_PER_REQUEST]; > }; > +struct blkif_x86_64_request_discard { > + uint8_t operation; /* BLKIF_OP_DISCARD > */ > + uint8_t flag; /* nr_segments in request struct > */ > + blkif_vdev_t handle; /* only for read/write requests > */ > + uint64_t __attribute__((__aligned__(8))) id; > + blkif_sector_t sector_number; /* start sector idx on disk (r/w only) > */ > + uint64_t nr_sectors; /* # of contiguous sectors to discard > */ > +}; > struct blkif_x86_64_response { > uint64_t __attribute__((__aligned__(8))) id; > uint8_t operation; /* copied from request */ > @@ -88,7 +104,7 @@ static inline void blkif_get_x86_32_req(blkif_request_t > *dst, > /* Prevent the compiler from using src->... instead. */ > barrier(); > if (dst->operation == BLKIF_OP_DISCARD) { > - struct blkif_request_discard *s = (void *)src; > + struct blkif_x86_32_request_discard *s = (void *)src; > struct blkif_request_discard *d = (void *)dst; > d->nr_sectors = s->nr_sectors; > return; > @@ -114,7 +130,7 @@ static inline void blkif_get_x86_64_req(blkif_request_t > *dst, > /* Prevent the compiler from using src->... instead. */ > barrier(); > if (dst->operation == BLKIF_OP_DISCARD) { > - struct blkif_request_discard *s = (void *)src; > + struct blkif_x86_64_request_discard *s = (void *)src; > struct blkif_request_discard *d = (void *)dst; > d->nr_sectors = s->nr_sectors; > return; > -- > 2.6.6 > _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |