[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 02/12] block: clarify the meaning of BDRV_O_NOCACHE
From: |
Kevin Wolf |
Subject: |
[Qemu-devel] [PATCH 02/12] block: clarify the meaning of BDRV_O_NOCACHE |
Date: |
Wed, 8 Jun 2011 15:48:20 +0200 |
From: Christoph Hellwig <address@hidden>
Change BDRV_O_NOCACHE to only imply bypassing the host OS file cache,
but no writeback semantics. All existing callers are changed to also
specify BDRV_O_CACHE_WB to give them writeback semantics.
Signed-off-by: Christoph Hellwig <address@hidden>
Signed-off-by: Kevin Wolf <address@hidden>
---
block.c | 8 +-------
block/qcow2.c | 2 +-
block/raw-posix.c | 2 +-
block/raw-win32.c | 12 ++++++------
blockdev.c | 2 +-
qemu-io.c | 4 ++--
qemu-nbd.c | 2 +-
7 files changed, 13 insertions(+), 19 deletions(-)
diff --git a/block.c b/block.c
index effa86f..3036a2d 100644
--- a/block.c
+++ b/block.c
@@ -439,13 +439,7 @@ static int bdrv_open_common(BlockDriverState *bs, const
char *filename,
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))
+ if (flags & BDRV_O_CACHE_WB)
bs->enable_write_cache = 1;
/*
diff --git a/block/qcow2.c b/block/qcow2.c
index 75b8bec..db1931b 100644
--- a/block/qcow2.c
+++ b/block/qcow2.c
@@ -229,7 +229,7 @@ static int qcow2_open(BlockDriverState *bs, int flags)
}
/* alloc L2 table/refcount block cache */
- writethrough = ((flags & BDRV_O_CACHE_MASK) == 0);
+ writethrough = ((flags & BDRV_O_CACHE_WB) == 0);
s->l2_table_cache = qcow2_cache_create(bs, L2_CACHE_SIZE, writethrough);
s->refcount_block_cache = qcow2_cache_create(bs, REFCOUNT_CACHE_SIZE,
writethrough);
diff --git a/block/raw-posix.c b/block/raw-posix.c
index 6b72470..50428fd 100644
--- a/block/raw-posix.c
+++ b/block/raw-posix.c
@@ -154,7 +154,7 @@ static int raw_open_common(BlockDriverState *bs, const char
*filename,
* and O_DIRECT for no caching. */
if ((bdrv_flags & BDRV_O_NOCACHE))
s->open_flags |= O_DIRECT;
- else if (!(bdrv_flags & BDRV_O_CACHE_WB))
+ if (!(bdrv_flags & BDRV_O_CACHE_WB))
s->open_flags |= O_DSYNC;
s->fd = -1;
diff --git a/block/raw-win32.c b/block/raw-win32.c
index c204a80..56bd719 100644
--- a/block/raw-win32.c
+++ b/block/raw-win32.c
@@ -88,9 +88,9 @@ static int raw_open(BlockDriverState *bs, const char
*filename, int flags)
}
overlapped = FILE_ATTRIBUTE_NORMAL;
- if ((flags & BDRV_O_NOCACHE))
- overlapped |= FILE_FLAG_NO_BUFFERING | FILE_FLAG_WRITE_THROUGH;
- else if (!(flags & BDRV_O_CACHE_WB))
+ if (flags & BDRV_O_NOCACHE)
+ overlapped |= FILE_FLAG_NO_BUFFERING;
+ if (!(flags & BDRV_O_CACHE_WB))
overlapped |= FILE_FLAG_WRITE_THROUGH;
s->hfile = CreateFile(filename, access_flags,
FILE_SHARE_READ, NULL,
@@ -349,9 +349,9 @@ static int hdev_open(BlockDriverState *bs, const char
*filename, int flags)
create_flags = OPEN_EXISTING;
overlapped = FILE_ATTRIBUTE_NORMAL;
- if ((flags & BDRV_O_NOCACHE))
- overlapped |= FILE_FLAG_NO_BUFFERING | FILE_FLAG_WRITE_THROUGH;
- else if (!(flags & BDRV_O_CACHE_WB))
+ if (flags & BDRV_O_NOCACHE)
+ overlapped |= FILE_FLAG_NO_BUFFERING;
+ if (!(flags & BDRV_O_CACHE_WB))
overlapped |= FILE_FLAG_WRITE_THROUGH;
s->hfile = CreateFile(filename, access_flags,
FILE_SHARE_READ, NULL,
diff --git a/blockdev.c b/blockdev.c
index 6e0eb83..1502575 100644
--- a/blockdev.c
+++ b/blockdev.c
@@ -326,7 +326,7 @@ DriveInfo *drive_init(QemuOpts *opts, int default_to_scsi)
if ((buf = qemu_opt_get(opts, "cache")) != NULL) {
if (!strcmp(buf, "off") || !strcmp(buf, "none")) {
- bdrv_flags |= BDRV_O_NOCACHE;
+ bdrv_flags |= BDRV_O_NOCACHE | BDRV_O_CACHE_WB;
} else if (!strcmp(buf, "writeback")) {
bdrv_flags |= BDRV_O_CACHE_WB;
} else if (!strcmp(buf, "unsafe")) {
diff --git a/qemu-io.c b/qemu-io.c
index 4470e49..dd4ebf5 100644
--- a/qemu-io.c
+++ b/qemu-io.c
@@ -1655,7 +1655,7 @@ open_f(int argc, char **argv)
flags |= BDRV_O_SNAPSHOT;
break;
case 'n':
- flags |= BDRV_O_NOCACHE;
+ flags |= BDRV_O_NOCACHE | BDRV_O_CACHE_WB;
break;
case 'r':
readonly = 1;
@@ -1751,7 +1751,7 @@ int main(int argc, char **argv)
flags |= BDRV_O_SNAPSHOT;
break;
case 'n':
- flags |= BDRV_O_NOCACHE;
+ flags |= BDRV_O_NOCACHE | BDRV_O_CACHE_WB;
break;
case 'c':
add_user_command(optarg);
diff --git a/qemu-nbd.c b/qemu-nbd.c
index e858033..110d78e 100644
--- a/qemu-nbd.c
+++ b/qemu-nbd.c
@@ -238,7 +238,7 @@ int main(int argc, char **argv)
flags |= BDRV_O_SNAPSHOT;
break;
case 'n':
- flags |= BDRV_O_NOCACHE;
+ flags |= BDRV_O_NOCACHE | BDRV_O_CACHE_WB;
break;
case 'b':
bindto = optarg;
--
1.7.5.2
- [Qemu-devel] [PULL 00/12] Block patches, Kevin Wolf, 2011/06/08
- [Qemu-devel] [PATCH 03/12] vmdk: fix endianness bugs, Kevin Wolf, 2011/06/08
- [Qemu-devel] [PATCH 04/12] block/raw-posix: use a character device if a block device is given, Kevin Wolf, 2011/06/08
- [Qemu-devel] [PATCH 08/12] rbd: check return values when scheduling aio, Kevin Wolf, 2011/06/08
- [Qemu-devel] [PATCH 02/12] block: clarify the meaning of BDRV_O_NOCACHE,
Kevin Wolf <=
- [Qemu-devel] [PATCH 06/12] rbd: use the higher level librbd instead of just librados, Kevin Wolf, 2011/06/08
- [Qemu-devel] [PATCH 11/12] bdrv_img_create: Fix segfault, Kevin Wolf, 2011/06/08
- [Qemu-devel] [PATCH 07/12] rbd: allow configuration of rados from the rbd filename, Kevin Wolf, 2011/06/08
- [Qemu-devel] [PATCH 01/12] ide/core: Remove explicit setting of BM_STATUS_INT, Kevin Wolf, 2011/06/08
- [Qemu-devel] [PATCH 10/12] qcow2: Fix memory leaks in error cases, Kevin Wolf, 2011/06/08
- [Qemu-devel] [PATCH 05/12] block/raw-posix: get right partition size, Kevin Wolf, 2011/06/08
- [Qemu-devel] [PATCH 09/12] rbd: Add bdrv_truncate implementation, Kevin Wolf, 2011/06/08
- [Qemu-devel] [PATCH 12/12] qemu-img create: Fix displayed default cluster size, Kevin Wolf, 2011/06/08
- Re: [Qemu-devel] [PULL 00/12] Block patches, Anthony Liguori, 2011/06/09