On Fri, Jan 18, 2013 at 4:43 PM, Liu Yuan <namei.u...@gmail.com> wrote: > Recently I found bdrv_co_flush_to_disk() doesn't work as expected. As > it is advertised > > /* > * Flushes all data that was already written to the OS all the way > down to > * the disk (for example raw-posix calls fsync()). > */ > int coroutine_fn (*bdrv_co_flush_to_disk)(BlockDriverState *bs); > > The fsync(2) or similar flush requests in the guest OS will trigger this > handler of the attached disk. > > But I noticed that this handler isn't called at all when guest is > running if I attach another disk as 'cache=writeback', for e.g > > # start up the guest > $ qemu-system-x86_64 --enable-kvm -drive > file=~/images/test1,if=virtio,cache=writeback -smp 2 -cpu host -m 1024 > -drive file=sheepdog:test,if=virtio,cache=writeback > # write to the /dev/vdb of the guest > # sudo dd if=/dev/urandom of=/dev/vdb bs=4M count=1 oflag=direct,sync > > This doesn't trigger flush for vdb device. I also write a small program > to call fsync(2) to the device, no flush neither. > > Only the poweroff of the guest will trigger the flush request for vdb. > So is this expected behavior and I am missing something?
How are you checking that sd_co_flush_to_disk() is called? Please post the diff. Stefan