* [Qemu-devel] [PATCH] virtio-blk: fix barrier support
@ 2010-05-19 10:40 Christoph Hellwig
2010-05-19 11:27 ` Kevin Wolf
0 siblings, 1 reply; 2+ messages in thread
From: Christoph Hellwig @ 2010-05-19 10:40 UTC (permalink / raw)
To: qemu-devel
Before issuing the barrier to the block driver we need to flush our oustanding
queue of write requests, as the flush is supposed to be issued after them.
Signed-off-by: Christoph Hellwig <hch@lst.de>
Index: qemu/hw/virtio-blk.c
===================================================================
--- qemu.orig/hw/virtio-blk.c 2010-05-19 11:05:23.259005741 +0200
+++ qemu/hw/virtio-blk.c 2010-05-19 11:08:09.797255846 +0200
@@ -238,10 +238,20 @@ static void do_multiwrite(BlockDriverSta
}
}
-static void virtio_blk_handle_flush(VirtIOBlockReq *req)
+static void virtio_blk_handle_flush(BlockRequest *blkreq, int *num_writes,
+ VirtIOBlockReq *req, BlockDriverState **old_bs)
{
BlockDriverAIOCB *acb;
+ /*
+ * Make sure all outstanding writes are posted to the backing device.
+ */
+ if (*old_bs != NULL) {
+ do_multiwrite(*old_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) {
virtio_blk_req_complete(req, VIRTIO_BLK_S_IOERR);
@@ -314,7 +324,8 @@ 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(req);
+ virtio_blk_handle_flush(mrb->blkreq, &mrb->num_writes,
+ req, &mrb->old_bs);
} else if (req->out->type & VIRTIO_BLK_T_SCSI_CMD) {
virtio_blk_handle_scsi(req);
} else if (req->out->type & VIRTIO_BLK_T_OUT) {
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [Qemu-devel] [PATCH] virtio-blk: fix barrier support
2010-05-19 10:40 [Qemu-devel] [PATCH] virtio-blk: fix barrier support Christoph Hellwig
@ 2010-05-19 11:27 ` Kevin Wolf
0 siblings, 0 replies; 2+ messages in thread
From: Kevin Wolf @ 2010-05-19 11:27 UTC (permalink / raw)
To: Christoph Hellwig; +Cc: qemu-devel
Am 19.05.2010 12:40, schrieb Christoph Hellwig:
> Before issuing the barrier to the block driver we need to flush our oustanding
> queue of write requests, as the flush is supposed to be issued after them.
>
> Signed-off-by: Christoph Hellwig <hch@lst.de>
Thanks, applied to the block branch.
I'm going to send a pull request today to get this in ASAP. It would be
helpful to know by then why Avi's patch helps and if it should be
pushed, too. It looks merely like a workaround, so I'd love to see it
replaced by a real fix.
Kevin
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2010-05-19 11:36 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-05-19 10:40 [Qemu-devel] [PATCH] virtio-blk: fix barrier support Christoph Hellwig
2010-05-19 11:27 ` Kevin Wolf
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).