From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=59004 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1OOGoS-0001Vt-Nv for qemu-devel@nongnu.org; Mon, 14 Jun 2010 17:05:26 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1OOGjE-0007wh-NL for qemu-devel@nongnu.org; Mon, 14 Jun 2010 16:57:58 -0400 Received: from mail-iw0-f173.google.com ([209.85.214.173]:56474) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1OOGjE-0007ly-KA for qemu-devel@nongnu.org; Mon, 14 Jun 2010 16:57:56 -0400 Received: by mail-iw0-f173.google.com with SMTP id 10so4582648iwn.4 for ; Mon, 14 Jun 2010 13:57:56 -0700 (PDT) Message-ID: <4C1697D6.2050008@codemonkey.ws> Date: Mon, 14 Jun 2010 15:57:58 -0500 From: Anthony Liguori MIME-Version: 1.0 Subject: Re: [Qemu-devel] [PATCH 1/2] virtio-blk: stop tracking old_bs References: <20100608162554.GA12253@lst.de> In-Reply-To: <20100608162554.GA12253@lst.de> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Christoph Hellwig Cc: qemu-devel@nongnu.org On 06/08/2010 11:25 AM, Christoph Hellwig wrote: > There is a 1:1 relation between VirtIOBlock and BlockDriverState instances, > no need to track it because it won't change. > > Signed-off-by: Christoph Hellwig > Applied all. Thanks. Regards, Anthony Liguori > Index: qemu/hw/virtio-blk.c > =================================================================== > --- qemu.orig/hw/virtio-blk.c 2010-05-26 13:36:07.000000000 +0200 > +++ qemu/hw/virtio-blk.c 2010-06-08 11:19:56.253262216 +0200 > @@ -241,18 +241,17 @@ static void do_multiwrite(BlockDriverSta > } > > static void virtio_blk_handle_flush(BlockRequest *blkreq, int *num_writes, > - VirtIOBlockReq *req, BlockDriverState **old_bs) > + VirtIOBlockReq *req) > { > BlockDriverAIOCB *acb; > > /* > * Make sure all outstanding writes are posted to the backing device. > */ > - if (*old_bs != NULL) { > - do_multiwrite(*old_bs, blkreq, *num_writes); > + if (*num_writes> 0) { > + do_multiwrite(req->dev->bs, blkreq, *num_writes); > } > *num_writes = 0; > - *old_bs = req->dev->bs; > > acb = bdrv_aio_flush(req->dev->bs, virtio_blk_flush_complete, req); > if (!acb) { > @@ -261,19 +260,16 @@ static void virtio_blk_handle_flush(Bloc > } > > static void virtio_blk_handle_write(BlockRequest *blkreq, int *num_writes, > - VirtIOBlockReq *req, BlockDriverState **old_bs) > + VirtIOBlockReq *req) > { > if (req->out->sector& req->dev->sector_mask) { > virtio_blk_rw_complete(req, -EIO); > return; > } > > - if (req->dev->bs != *old_bs || *num_writes == 32) { > - if (*old_bs != NULL) { > - do_multiwrite(*old_bs, blkreq, *num_writes); > - } > + if (*num_writes == 32) { > + do_multiwrite(req->dev->bs, blkreq, *num_writes); > *num_writes = 0; > - *old_bs = req->dev->bs; > } > > blkreq[*num_writes].sector = req->out->sector; > @@ -305,7 +301,6 @@ static void virtio_blk_handle_read(VirtI > typedef struct MultiReqBuffer { > BlockRequest blkreq[32]; > int num_writes; > - BlockDriverState *old_bs; > } MultiReqBuffer; > > static void virtio_blk_handle_request(VirtIOBlockReq *req, > @@ -326,15 +321,13 @@ static void virtio_blk_handle_request(Vi > req->in = (void *)req->elem.in_sg[req->elem.in_num - 1].iov_base; > > if (req->out->type& VIRTIO_BLK_T_FLUSH) { > - virtio_blk_handle_flush(mrb->blkreq,&mrb->num_writes, > - req,&mrb->old_bs); > + virtio_blk_handle_flush(mrb->blkreq,&mrb->num_writes, req); > } else if (req->out->type& VIRTIO_BLK_T_SCSI_CMD) { > virtio_blk_handle_scsi(req); > } else if (req->out->type& VIRTIO_BLK_T_OUT) { > qemu_iovec_init_external(&req->qiov,&req->elem.out_sg[1], > req->elem.out_num - 1); > - virtio_blk_handle_write(mrb->blkreq,&mrb->num_writes, > - req,&mrb->old_bs); > + virtio_blk_handle_write(mrb->blkreq,&mrb->num_writes, req); > } else { > qemu_iovec_init_external(&req->qiov,&req->elem.in_sg[0], > req->elem.in_num - 1); > @@ -348,7 +341,6 @@ static void virtio_blk_handle_output(Vir > VirtIOBlockReq *req; > MultiReqBuffer mrb = { > .num_writes = 0, > - .old_bs = NULL, > }; > > while ((req = virtio_blk_get_request(s))) { > @@ -356,7 +348,7 @@ static void virtio_blk_handle_output(Vir > } > > if (mrb.num_writes> 0) { > - do_multiwrite(mrb.old_bs, mrb.blkreq, mrb.num_writes); > + do_multiwrite(s->bs, mrb.blkreq, mrb.num_writes); > } > > /* > @@ -372,7 +364,6 @@ static void virtio_blk_dma_restart_bh(vo > VirtIOBlockReq *req = s->rq; > MultiReqBuffer mrb = { > .num_writes = 0, > - .old_bs = NULL, > }; > > qemu_bh_delete(s->bh); > @@ -386,7 +377,7 @@ static void virtio_blk_dma_restart_bh(vo > } > > if (mrb.num_writes> 0) { > - do_multiwrite(mrb.old_bs, mrb.blkreq, mrb.num_writes); > + do_multiwrite(s->bs, mrb.blkreq, mrb.num_writes); > } > } > > > >