[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH] QEMU: fsync AIO writes on flush request
From: |
Marcelo Tosatti |
Subject: |
[Qemu-devel] [PATCH] QEMU: fsync AIO writes on flush request |
Date: |
Fri, 28 Mar 2008 12:05:18 -0300 |
User-agent: |
Mutt/1.4.2.1i |
Its necessary to guarantee that pending AIO writes have reached stable
storage when the flush request returns.
Also change fsync() to fdatasync(), since the modification time is not
critical data.
Signed-off-by: Marcelo Tosatti <address@hidden>
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,40 @@ 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);
+ fdatasync(s->fd);
+
+ /* 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 <=
- 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, 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, Paul Brook, 2008/03/28