Il 17/09/2013 03:20, Rusty Russell ha scritto:
> bdrv_co_flush() calls:
>
> bs->drv->bdrv_co_flush_to_disk
>
> or if that's NULL:
>
> bs->drv->bdrv_aio_flush
>
> or if that's NULL, does nothing.
>
> Now, qcow2 doesn't set bdrv_co_flush_to_disk or bdrv_aio_flush.
It also does
bdrv_co_flush(bs->file);
and that's where bdrv_co_flush_to_disk gets called.
> It seems a raw file will get an fdatasync, via bdrv_aio_flush() ->
> raw_aio_flush(), but strace shows no fsync/fdatasync calls, even when I
> just a raw file, and type "sync" in the guest:
That's the same path that gets qcow2 flushed, actually. You need
"strace -ff" because the flush is done in a thread pool.
> So perhaps if you use the right back ends and set your non-default
> options just right you can have your data safe on disk? But you're
> certainly not convincing me anyone wants it...
I'm 100% sure that QEMU gets data safely on disk. :)
Paolo