summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--qemu-img.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/qemu-img.c b/qemu-img.c
index 7e73c5c1da..7b9ba99f5d 100644
--- a/qemu-img.c
+++ b/qemu-img.c
@@ -450,6 +450,11 @@ static BlockBackend *img_open(bool image_opts,
         blk = img_open_file(filename, NULL, fmt, flags, writethrough, quiet,
                             force_share);
     }
+
+    if (blk) {
+        blk_set_force_allow_inactivate(blk);
+    }
+
     return blk;
 }
 
@@ -1120,6 +1125,14 @@ unref_backing:
 done:
     qemu_progress_end();
 
+    /*
+     * Manually inactivate the image first because this way we can know whether
+     * an error occurred. blk_unref() doesn't tell us about failures.
+     */
+    ret = bdrv_inactivate_all();
+    if (ret < 0 && !local_err) {
+        error_setg_errno(&local_err, -ret, "Error while closing the image");
+    }
     blk_unref(blk);
 
     if (local_err) {