Add bdrv_getlength() of underlying bs->file->bs, to improve
'Format unallocated size' section of qemu-img check output.

Signed-off-by: Vladimir Sementsov-Ogievskiy <vsement...@virtuozzo.com>
---
 qapi/block-core.json |  2 +-
 qemu-img.c           | 11 ++++++++---
 2 files changed, 9 insertions(+), 4 deletions(-)

diff --git a/qapi/block-core.json b/qapi/block-core.json
index c7ed5dc970..f720a29512 100644
--- a/qapi/block-core.json
+++ b/qapi/block-core.json
@@ -186,7 +186,7 @@
            '*corruptions-fixed': 'int', '*leaks-fixed': 'int',
            '*total-clusters': 'int', '*allocated-clusters': 'int',
            '*fragmented-clusters': 'int', '*compressed-clusters': 'int',
-           '*format-unallocated-size': 'uint64'} }
+           '*format-unallocated-size': 'uint64', '*file-size': 'uint64'} }
 
 ##
 # @MapEntry:
diff --git a/qemu-img.c b/qemu-img.c
index cbd09148d2..08a2b5ba54 100644
--- a/qemu-img.c
+++ b/qemu-img.c
@@ -603,10 +603,13 @@ static void dump_human_image_check(ImageCheck *check, 
bool quiet)
     }
 
     if (check->has_format_unallocated_size) {
-        char u_buf[128];
-        qprintf(quiet, "Format unallocated size: %s\n",
+        char buf[128], u_buf[128];
+        assert(check->has_file_size);
+        qprintf(quiet, "Format unallocated size: %s/%s = %0.2f%%\n",
                 get_human_readable_size(u_buf, sizeof(u_buf),
-                                        check->format_unallocated_size));
+                                        check->format_unallocated_size),
+                get_human_readable_size(buf, sizeof(buf), check->file_size),
+                check->format_unallocated_size * 100.0 / check->file_size);
     }
 }
 
@@ -650,6 +653,8 @@ static int collect_image_check(BlockDriverState *bs,
         int64_t file_size = bdrv_getlength(bs->file->bs);
         if (file_size >= 0) {
             int64_t format_allocated_size = bdrv_get_format_allocated_size(bs);
+            check->file_size = file_size;
+            check->has_file_size = true;
             if (format_allocated_size >= 0) {
                 check->format_unallocated_size =
                     file_size - format_allocated_size;
-- 
2.11.1


Reply via email to