Hi List, 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? Thanks, Yuan