[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [kvm-devel] [Qemu-devel] [PATCH] QEMU: fsync AIO writes on flush req
From: |
Marcelo Tosatti |
Subject: |
Re: [kvm-devel] [Qemu-devel] [PATCH] QEMU: fsync AIO writes on flush request |
Date: |
Fri, 28 Mar 2008 15:13:11 -0300 |
User-agent: |
Mutt/1.4.2.1i |
On Fri, Mar 28, 2008 at 05:00:39PM +0000, Paul Brook wrote:
> > > Surely you should be using the normal aio notification to wait for the
> > > aio_fsync to complete before reporting success to the device.
> >
> > qemu_aio_flush() will wait for all pending AIO requests (including
> > aio_fsync) to complete.
>
> Then why do you need to separate fdatasync?
Oh, I see what Jamie means now: fdatasync() is redundant with
aio_fsync(O_DSYNC).
How's this?
Index: kvm-userspace.io/qemu/block-raw-posix.c
===================================================================
--- kvm-userspace.io.orig/qemu/block-raw-posix.c
+++ kvm-userspace.io/qemu/block-raw-posix.c
@@ -557,10 +557,39 @@ static int raw_create(const char *filena
return 0;
}
+static void raw_aio_flush_complete(void *opaque, int ret)
+{
+ if (ret)
+ printf("WARNING: aio_fsync failed (completion)\n");
+}
+
+static void raw_aio_flush(BlockDriverState *bs)
+{
+ RawAIOCB *acb;
+
+ acb = raw_aio_setup(bs, 0, NULL, 0, raw_aio_flush_complete, NULL);
+ if (!acb)
+ return;
+
+ if (aio_fsync(O_DSYNC, &acb->aiocb) < 0) {
+ qemu_aio_release(acb);
+ perror("aio_fsync");
+ printf("WARNING: aio_fsync failed\n");
+ return;
+ }
+}
+
static void raw_flush(BlockDriverState *bs)
{
BDRVRawState *s = bs->opaque;
- fsync(s->fd);
+ raw_aio_flush(bs);
+
+ /* We rely on the fact that no other AIO will be submitted
+ * in parallel, but this should be fixed by per-device
+ * AIO queues when allowing multiple CPU's to process IO
+ * in QEMU.
+ */
+ qemu_aio_flush();
}
BlockDriver bdrv_raw = {
- [Qemu-devel] [PATCH] QEMU: fsync AIO writes on flush request, Marcelo Tosatti, 2008/03/28
- Re: [Qemu-devel] [PATCH] QEMU: fsync AIO writes on flush request, Jamie Lokier, 2008/03/28
- Re: [kvm-devel] [Qemu-devel] [PATCH] QEMU: fsync AIO writes on flush request, Marcelo Tosatti, 2008/03/28
- Re: [kvm-devel] [Qemu-devel] [PATCH] QEMU: fsync AIO writes on flush request, Paul Brook, 2008/03/28
- Re: [kvm-devel] [Qemu-devel] [PATCH] QEMU: fsync AIO writes on flush request, Marcelo Tosatti, 2008/03/28
- Re: [kvm-devel] [Qemu-devel] [PATCH] QEMU: fsync AIO writes on flush request, Paul Brook, 2008/03/28
- Re: [kvm-devel] [Qemu-devel] [PATCH] QEMU: fsync AIO writes on flush request,
Marcelo Tosatti <=
- Re: [kvm-devel] [Qemu-devel] [PATCH] QEMU: fsync AIO writes on flush request, Jamie Lokier, 2008/03/28
- Re: [kvm-devel] [Qemu-devel] [PATCH] QEMU: fsync AIO writes on flush request, Paul Brook, 2008/03/28
- Re: [kvm-devel] [Qemu-devel] [PATCH] QEMU: fsync AIO writes on flush request, Jamie Lokier, 2008/03/28
- Re: [kvm-devel] [Qemu-devel] [PATCH] QEMU: fsync AIO writes on flush request, Paul Brook, 2008/03/28
- Re: [kvm-devel] [Qemu-devel] [PATCH] QEMU: fsync AIO writes on flush request, Jamie Lokier, 2008/03/28
- Re: [kvm-devel] [Qemu-devel] [PATCH] QEMU: fsync AIO writes on flush request, Marcelo Tosatti, 2008/03/28
- Re: [kvm-devel] [Qemu-devel] [PATCH] QEMU: fsync AIO writes on flush request, Jamie Lokier, 2008/03/28
- Re: [kvm-devel] [Qemu-devel] [PATCH] QEMU: fsync AIO writes on flush request, Marcelo Tosatti, 2008/03/29
Re: [Qemu-devel] [PATCH] QEMU: fsync AIO writes on flush request, Ian Jackson, 2008/03/28