These are needed to print "info block" output correctly.  QCOW2 does
this already because it needs it to write the header, but QED does not,
and common code is a better place to do it.

Signed-off-by: Paolo Bonzini <pbonz...@redhat.com>
---
 block.c |   11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/block.c b/block.c
index e293882..afff23f 100644
--- a/block.c
+++ b/block.c
@@ -1402,6 +1402,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) {
@@ -1409,10 +1410,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,
-- 
1.7.9.3


Reply via email to