On 10/21/2010 09:07 AM, Kevin Wolf wrote:
Hi all,
I'm currently looking into adding a return value to qemu's bdrv_flush
function and I noticed that your block drivers (nbd, rbd and sheepdog)
don't implement bdrv_flush at all. bdrv_flush is going to return
-ENOTSUP for any block driver not implementing this, effectively
breaking these three drivers for anything but cache=unsafe.
Is there a specific reason why your drivers don't implement this?
NBD doesn't have a notion of flush. Only read/write and the block-nbd
implementation doesn't do write-caching so flush would be a nop.
I'm not sure what the right semantics would be for QEMU. My guess is a
nop flush.
Regards,
Anthony Liguori
I
think I remember that one of the drivers always provides
cache=writethough semantics. It would be okay to silently "upgrade" to
cache=writethrough, so in this case I'd just need to add an empty
bdrv_flush implementation.
Otherwise, we really cannot allow any option except cache=unsafe because
that's the semantics provided by the driver.
In any case, I think it would be a good idea to implement a real
bdrv_flush function to allow the write-back cache modes cache=off and
cache=writeback in order to improve performance over writethrough.
Is this possible with your protocols, or can the protocol be changed to
consider this? Any hints on how to proceed?
Kevin