On Wed, Jul 18, 2012 at 04:07:49PM +0100, Stefan Hajnoczi wrote: > Khoa Huynh <khoa@xxxxxxxxxx> discovered that request merging is broken. > The merged iocb is not updated to reflect the total number of iovecs and > the offset is also outdated. > > This patch fixes request merging. > > Signed-off-by: Stefan Hajnoczi <stefanha@xxxxxxxxxxxxxxxxxx> So all these fixups need to be folded in making it correct first time. > --- > hw/virtio-blk.c | 10 +++++++--- > 1 file changed, 7 insertions(+), 3 deletions(-) > > diff --git a/hw/virtio-blk.c b/hw/virtio-blk.c > index 9131a7a..51807b5 100644 > --- a/hw/virtio-blk.c > +++ b/hw/virtio-blk.c > @@ -178,13 +178,17 @@ static void merge_request(struct iocb *iocb_a, struct iocb *iocb_b) > req_a->len = iocb_nbytes(iocb_a); > } > > - iocb_b->u.v.vec = iovec; > - req_b->len = iocb_nbytes(iocb_b); > - req_b->next_merged = req_a; > /* > fprintf(stderr, "merged %p (%u) and %p (%u), %u iovecs in total\n", > req_a, iocb_a->u.v.nr, req_b, iocb_b->u.v.nr, iocb_a->u.v.nr + iocb_b->u.v.nr); > */ > + > + iocb_b->u.v.vec = iovec; > + iocb_b->u.v.nr += iocb_a->u.v.nr; > + iocb_b->u.v.offset = iocb_a->u.v.offset; > + > + req_b->len = iocb_nbytes(iocb_b); > + req_b->next_merged = req_a; > } > > static void process_request(IOQueue *ioq, struct iovec iov[], unsigned int out_num, unsigned int in_num, unsigned int head) > -- > 1.7.10.4 -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html