mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-03 15:53:54 -06:00
block: add enable_write_cache flag
Add a enable_write_cache flag in the block driver state, and use it to decide if we claim to have a volatile write cache that needs controlled flushing from the guest. The flag is off if cache=writethrough is defined because O_DSYNC guarantees that every write goes to stable storage, and it is on for cache=none and cache=writeback. Both scsi-disk and ide now use the new flage, changing from their defaults of always off (ide) or always on (scsi-disk). Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
parent
b8193adbda
commit
e900a7b748
5 changed files with 27 additions and 3 deletions
15
block.c
15
block.c
|
@ -408,6 +408,16 @@ int bdrv_open2(BlockDriverState *bs, const char *filename, int flags,
|
|||
}
|
||||
bs->drv = drv;
|
||||
bs->opaque = qemu_mallocz(drv->instance_size);
|
||||
|
||||
/*
|
||||
* Yes, BDRV_O_NOCACHE aka O_DIRECT means we have to present a
|
||||
* write cache to the guest. We do need the fdatasync to flush
|
||||
* out transactions for block allocations, and we maybe have a
|
||||
* volatile write cache in our backing device to deal with.
|
||||
*/
|
||||
if (flags & (BDRV_O_CACHE_WB|BDRV_O_NOCACHE))
|
||||
bs->enable_write_cache = 1;
|
||||
|
||||
/* Note: for compatibility, we open disk image files as RDWR, and
|
||||
RDONLY as fallback */
|
||||
if (!(flags & BDRV_O_FILE))
|
||||
|
@ -918,6 +928,11 @@ int bdrv_is_sg(BlockDriverState *bs)
|
|||
return bs->sg;
|
||||
}
|
||||
|
||||
int bdrv_enable_write_cache(BlockDriverState *bs)
|
||||
{
|
||||
return bs->enable_write_cache;
|
||||
}
|
||||
|
||||
/* XXX: no longer used */
|
||||
void bdrv_set_change_cb(BlockDriverState *bs,
|
||||
void (*change_cb)(void *opaque), void *opaque)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue