summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKevin Wolf <kwolf@redhat.com>2013-11-28 11:58:02 +0100
committerKevin Wolf <kwolf@redhat.com>2013-11-29 17:41:09 +0100
commitc9fbb99d41b05acf0d7b93deb2fcdbf9047c238e (patch)
treed69b04e2510ced9bc17efaa992ec78b79ab38280
parentf32f988c7778d0f1ff9c7e8d7547a354a7fdd3f6 (diff)
downloadqemu-c9fbb99d41b05acf0d7b93deb2fcdbf9047c238e.zip
block: Use BDRV_O_NO_BACKING where appropriate
If you open an image temporarily just because you want to check its size or get it flushed, there's no real reason to open the whole backing file chain. Signed-off-by: Kevin Wolf <kwolf@redhat.com> Reviewed-by: Fam Zheng <famz@redhat.com> Reviewed-by: Benoit Canet <benoit@irqsave.net>
-rw-r--r--block.c3
-rw-r--r--block/qcow2.c3
-rw-r--r--block/vmdk.c2
3 files changed, 5 insertions, 3 deletions
diff --git a/block.c b/block.c
index 08dd7f2294..3d78581c63 100644
--- a/block.c
+++ b/block.c
@@ -1061,7 +1061,8 @@ int bdrv_open(BlockDriverState *bs, const char *filename, QDict *options,
/* Get the required size from the image */
bs1 = bdrv_new("");
QINCREF(options);
- ret = bdrv_open(bs1, filename, options, 0, drv, &local_err);
+ ret = bdrv_open(bs1, filename, options, BDRV_O_NO_BACKING,
+ drv, &local_err);
if (ret < 0) {
bdrv_unref(bs1);
goto fail;
diff --git a/block/qcow2.c b/block/qcow2.c
index 2fe37ed6cb..8e2b6c7548 100644
--- a/block/qcow2.c
+++ b/block/qcow2.c
@@ -1588,7 +1588,8 @@ static int qcow2_create2(const char *filename, int64_t total_size,
/* Reopen the image without BDRV_O_NO_FLUSH to flush it before returning */
ret = bdrv_open(bs, filename, NULL,
- BDRV_O_RDWR | BDRV_O_CACHE_WB, drv, &local_err);
+ BDRV_O_RDWR | BDRV_O_CACHE_WB | BDRV_O_NO_BACKING,
+ drv, &local_err);
if (error_is_set(&local_err)) {
error_propagate(errp, local_err);
goto out;
diff --git a/block/vmdk.c b/block/vmdk.c
index 6555663a7e..5fb6c813ef 100644
--- a/block/vmdk.c
+++ b/block/vmdk.c
@@ -1690,7 +1690,7 @@ static int vmdk_create(const char *filename, QEMUOptionParameter *options,
}
if (backing_file) {
BlockDriverState *bs = bdrv_new("");
- ret = bdrv_open(bs, backing_file, NULL, 0, NULL, errp);
+ ret = bdrv_open(bs, backing_file, NULL, BDRV_O_NO_BACKING, NULL, errp);
if (ret != 0) {
bdrv_unref(bs);
return ret;