Patchwork [12/26] block: update in-memory backing file and format

login
register
mail settings
Submitter Paolo Bonzini
Date April 12, 2012, 12:01 p.m.
Message ID <1334232076-19018-13-git-send-email-pbonzini@redhat.com>
Download mbox | patch
Permalink /patch/152062/
State New
Headers show

Comments

Paolo Bonzini - April 12, 2012, 12:01 p.m.
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>
---
 block.c        |   11 +++++++++--
 block/stream.c |   11 -----------
 2 files changed, 9 insertions(+), 13 deletions(-)

Patch

diff --git a/block.c b/block.c
index 91bdefe..3f5bc92 100644
--- a/block.c
+++ b/block.c
@@ -1426,6 +1426,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) {
@@ -1433,10 +1434,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 0efe1ad..54f2b39 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);
-        }
-    }
-
 }
 
 /*