Make sure disk writes really made it to disk before we report I/O completion to the guest domain. The DMA_MULTI_THREAD functionality from the qemu-dm IDE emulation should make the performance overhead of synchronous writes bearable, or at least comparable to native hardware. Signed-off-by: Rik van Riel --- xen-unstable-10712/tools/ioemu/block-bochs.c.osync 2006-07-28 02:15:56.000000000 -0400 +++ xen-unstable-10712/tools/ioemu/block-bochs.c 2006-07-28 02:21:08.000000000 -0400 @@ -91,7 +91,7 @@ int fd, i; struct bochs_header bochs; - fd = open(filename, O_RDWR | O_BINARY | O_LARGEFILE); + fd = open(filename, O_RDWR | O_BINARY | O_LARGEFILE | O_SYNC); if (fd < 0) { fd = open(filename, O_RDONLY | O_BINARY | O_LARGEFILE); if (fd < 0) --- xen-unstable-10712/tools/ioemu/block.c.osync 2006-07-28 02:15:56.000000000 -0400 +++ xen-unstable-10712/tools/ioemu/block.c 2006-07-28 02:19:27.000000000 -0400 @@ -677,7 +677,7 @@ int rv; #endif - fd = open(filename, O_RDWR | O_BINARY | O_LARGEFILE); + fd = open(filename, O_RDWR | O_BINARY | O_LARGEFILE | O_SYNC); if (fd < 0) { fd = open(filename, O_RDONLY | O_BINARY | O_LARGEFILE); if (fd < 0) --- xen-unstable-10712/tools/ioemu/block-cloop.c.osync 2006-07-28 02:15:56.000000000 -0400 +++ xen-unstable-10712/tools/ioemu/block-cloop.c 2006-07-28 02:17:13.000000000 -0400 @@ -55,7 +55,7 @@ BDRVCloopState *s = bs->opaque; uint32_t offsets_size,max_compressed_block_size=1,i; - s->fd = open(filename, O_RDONLY | O_BINARY | O_LARGEFILE); + s->fd = open(filename, O_RDONLY | O_BINARY | O_LARGEFILE | O_SYNC); if (s->fd < 0) return -1; bs->read_only = 1; --- xen-unstable-10712/tools/ioemu/block-cow.c.osync 2006-07-28 02:15:56.000000000 -0400 +++ xen-unstable-10712/tools/ioemu/block-cow.c 2006-07-28 02:21:34.000000000 -0400 @@ -69,7 +69,7 @@ struct cow_header_v2 cow_header; int64_t size; - fd = open(filename, O_RDWR | O_BINARY | O_LARGEFILE); + fd = open(filename, O_RDWR | O_BINARY | O_LARGEFILE | O_SYNC); if (fd < 0) { fd = open(filename, O_RDONLY | O_BINARY | O_LARGEFILE); if (fd < 0) --- xen-unstable-10712/tools/ioemu/block-qcow.c.osync 2006-07-28 02:15:56.000000000 -0400 +++ xen-unstable-10712/tools/ioemu/block-qcow.c 2006-07-28 02:20:05.000000000 -0400 @@ -95,7 +95,7 @@ int fd, len, i, shift; QCowHeader header; - fd = open(filename, O_RDWR | O_BINARY | O_LARGEFILE); + fd = open(filename, O_RDWR | O_BINARY | O_LARGEFILE | O_SYNC); if (fd < 0) { fd = open(filename, O_RDONLY | O_BINARY | O_LARGEFILE); if (fd < 0) --- xen-unstable-10712/tools/ioemu/block-vmdk.c.osync 2006-07-28 02:15:56.000000000 -0400 +++ xen-unstable-10712/tools/ioemu/block-vmdk.c 2006-07-28 02:20:20.000000000 -0400 @@ -96,7 +96,7 @@ uint32_t magic; int l1_size; - fd = open(filename, O_RDWR | O_BINARY | O_LARGEFILE); + fd = open(filename, O_RDWR | O_BINARY | O_LARGEFILE | O_SYNC); if (fd < 0) { fd = open(filename, O_RDONLY | O_BINARY | O_LARGEFILE); if (fd < 0)