Re: [PATCH] virtio-blk: allow toggling host cache between writeback and writethrough

Sasha Levin
2012-07-04T21:10:39Z

On Wed, 2012-07-04 at 18:32 +0200, Paolo Bonzini wrote:
> Il 04/07/2012 18:26, Sasha Levin ha scritto:
> > On Tue, 2012-07-03 at 15:19 +0200, Paolo Bonzini wrote:
> >> diff --git a/include/linux/virtio_blk.h b/include/linux/virtio_blk.h
> >> index e0edb40..18a1027 100644
> >> --- a/include/linux/virtio_blk.h
> >> +++ b/include/linux/virtio_blk.h
> >> @@ -37,8 +37,9 @@
> >> #define VIRTIO_BLK_F_RO 5 /* Disk is read-only */
> >> #define VIRTIO_BLK_F_BLK_SIZE 6 /* Block size of disk is available*/
> >> #define VIRTIO_BLK_F_SCSI 7 /* Supports scsi command passthru */
> >> -#define VIRTIO_BLK_F_FLUSH 9 /* Cache flush command support */
> >> +#define VIRTIO_BLK_F_WCE 9 /* Writeback mode enabled after reset */
> >> #define VIRTIO_BLK_F_TOPOLOGY 10 /* Topology information is available */
> >> +#define VIRTIO_BLK_F_CONFIG_WCE 11 /* Writeback mode available in config */
> >
> > Wouldn't this change break any usermode code that implements virtio-blk?
>
> No, the change is really just clarifying the existing spec, and
> mandating that virtio-blk implementations follow certain assumptions of
> the Linux driver.
>
> In particular, the Linux driver is already assuming that the host
> exposes VIRTIO_BLK_F_FLUSH if and only if it exposes a volatile write
> cache. This works because if you have a writeback cache, but provide no
> way to flush it, the guest driver really cannot do anything about it
> anyway. Might as well treat it as writethrough, i.e. blk_queue_flush(q, 0).
>
> QEMU in fact has already behaved like that, and even called the flag
> VIRTIO_BLK_F_WCACHE instead of VIRRTIO_BLK_F_FLUSH.

There are two things going on here:
1. Rename VIRTIO_BLK_F_FLUSH to VIRTIO_BLK_F_WCE
2. Add a new VIRTIO_BLK_F_CONFIG_WCE

I'm concerned that the first change is going to break compilation for
any code that included linux/virtio-blk.h and used VIRTIO_BLK_F_FLUSH.