[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] bdrv_co_flush_to_disk() don't flush as expected
From: |
Stefan Hajnoczi |
Subject: |
Re: [Qemu-devel] bdrv_co_flush_to_disk() don't flush as expected |
Date: |
Fri, 18 Jan 2013 16:56:05 +0100 |
On Fri, Jan 18, 2013 at 4:43 PM, Liu Yuan <address@hidden> 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