aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaolo Bonzini <pbonzini@redhat.com>2012-04-12 14:01:02 +0200
committerKevin Wolf <kwolf@redhat.com>2012-05-10 10:32:11 +0200
commit469ef350e1a8b5715e620dbf6f6115628e5b566e (patch)
tree876de5201368d945ea9b28f23a44d23bad1a33a9
parent5f3777945d22248d805fb7c134e206c2d943b77b (diff)
downloadqemu-469ef350e1a8b5715e620dbf6f6115628e5b566e.zip
qemu-469ef350e1a8b5715e620dbf6f6115628e5b566e.tar.gz
qemu-469ef350e1a8b5715e620dbf6f6115628e5b566e.tar.bz2
block: update in-memory backing file and format
These are needed to print "info block" output correctly. QCOW2 does this because it needs it to write the header, but QED does not, and common code is the right place to do it. Reviewed-by: Kevin Wolf <kwolf@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
-rw-r--r--block.c11
-rw-r--r--block/stream.c11
2 files changed, 9 insertions, 13 deletions
diff --git a/block.c b/block.c
index 068e41d..dbd60e3 100644
--- a/block.c
+++ b/block.c
@@ -1459,6 +1459,7 @@ int bdrv_change_backing_file(BlockDriverState *bs,
const char *backing_file, const char *backing_fmt)
{
BlockDriver *drv = bs->drv;
+ int ret;
/* Backing file format doesn't make sense without a backing file */
if (backing_fmt && !backing_file) {
@@ -1466,10 +1467,16 @@ int bdrv_change_backing_file(BlockDriverState *bs,
}
if (drv->bdrv_change_backing_file != NULL) {
- return drv->bdrv_change_backing_file(bs, backing_file, backing_fmt);
+ ret = drv->bdrv_change_backing_file(bs, backing_file, backing_fmt);
} else {
- return -ENOTSUP;
+ ret = -ENOTSUP;
+ }
+
+ if (ret == 0) {
+ pstrcpy(bs->backing_file, sizeof(bs->backing_file), backing_file ?: "");
+ pstrcpy(bs->backing_format, sizeof(bs->backing_format), backing_fmt ?: "");
}
+ return ret;
}
static int bdrv_check_byte_request(BlockDriverState *bs, int64_t offset,
diff --git a/block/stream.c b/block/stream.c
index 6724af2..b7e1ad4 100644
--- a/block/stream.c
+++ b/block/stream.c
@@ -96,17 +96,6 @@ static void close_unused_images(BlockDriverState *top, BlockDriverState *base,
bdrv_delete(unused);
}
top->backing_hd = base;
-
- pstrcpy(top->backing_file, sizeof(top->backing_file), "");
- pstrcpy(top->backing_format, sizeof(top->backing_format), "");
- if (base_id) {
- pstrcpy(top->backing_file, sizeof(top->backing_file), base_id);
- if (base->drv) {
- pstrcpy(top->backing_format, sizeof(top->backing_format),
- base->drv->format_name);
- }
- }
-
}
/*