Message ID | 1337350712-29183-4-git-send-email-pbonzini@redhat.com |
---|---|
State | New |
Headers | show |
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
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 --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); }
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(-)