diff mbox

[RFC,3/7] block: do not pass BDRV_O_CACHE_WB to the protocol

Message ID 1337350712-29183-4-git-send-email-pbonzini@redhat.com
State New
Headers show

Commit Message

Paolo Bonzini May 18, 2012, 2:18 p.m. UTC
Formats are entirely in charge of flushes for metadata writes.  For
guest-initiated writes, a writethrough cache is faked in the block layer.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 block.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Stefan Hajnoczi May 23, 2012, 12:06 p.m. UTC | #1
On Fri, May 18, 2012 at 3:18 PM, Paolo Bonzini <pbonzini@redhat.com> wrote:
> Formats are entirely in charge of flushes for metadata writes.  For
> guest-initiated writes, a writethrough cache is faked in the block layer.
>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
>  block.c |    2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/block.c b/block.c
> index 3db7150..b3d0054 100644
> --- a/block.c
> +++ b/block.c
> @@ -661,7 +661,7 @@ static int bdrv_open_common(BlockDriverState *bs, const char *filename,
>     if (drv->bdrv_file_open) {
>         ret = drv->bdrv_file_open(bs, filename, open_flags);
>     } else {
> -        ret = bdrv_file_open(&bs->file, filename, open_flags);
> +        ret = bdrv_file_open(&bs->file, filename, open_flags & ~BDRV_O_CACHE_WB);

Do you really want to open image files with O_DSYNC?  For example,
when I try these patches with -drive
if=virtio,file=test.img,cache=none I find that the image file file
descriptor has O_DSYNC set!  That would make cache=none equivalent to
cache=directsync.

Stefan
Paolo Bonzini May 23, 2012, 12:11 p.m. UTC | #2
Il 23/05/2012 14:06, Stefan Hajnoczi ha scritto:
>> > diff --git a/block.c b/block.c
>> > index 3db7150..b3d0054 100644
>> > --- a/block.c
>> > +++ b/block.c
>> > @@ -661,7 +661,7 @@ static int bdrv_open_common(BlockDriverState *bs, const char *filename,
>> >     if (drv->bdrv_file_open) {
>> >         ret = drv->bdrv_file_open(bs, filename, open_flags);
>> >     } else {
>> > -        ret = bdrv_file_open(&bs->file, filename, open_flags);
>> > +        ret = bdrv_file_open(&bs->file, filename, open_flags & ~BDRV_O_CACHE_WB);
> Do you really want to open image files with O_DSYNC?  For example,
> when I try these patches with -drive
> if=virtio,file=test.img,cache=none I find that the image file file
> descriptor has O_DSYNC set!  That would make cache=none equivalent to
> cache=directsync.

See the revised version I posted yesterday, this patch is bonkers. :)

What I wanted is "| BDRV_O_CACHE_WB".

Paolo
diff mbox

Patch

diff --git a/block.c b/block.c
index 3db7150..b3d0054 100644
--- a/block.c
+++ b/block.c
@@ -661,7 +661,7 @@  static int bdrv_open_common(BlockDriverState *bs, const char *filename,
     if (drv->bdrv_file_open) {
         ret = drv->bdrv_file_open(bs, filename, open_flags);
     } else {
-        ret = bdrv_file_open(&bs->file, filename, open_flags);
+        ret = bdrv_file_open(&bs->file, filename, open_flags & ~BDRV_O_CACHE_WB);
         if (ret >= 0) {
             ret = drv->bdrv_open(bs, open_flags);
         }