Patchwork [v3,4/5] qemu-img: add compressed clusters to BlockFragInfo

login
register
mail settings
Submitter Stefan Hajnoczi
Date Feb. 7, 2013, 4:15 p.m.
Message ID <1360253705-10400-5-git-send-email-stefanha@redhat.com>
Download mbox | patch
Permalink /patch/218947/
State New
Headers show

Comments

Stefan Hajnoczi - Feb. 7, 2013, 4:15 p.m.
Show how many clusters are compressed.  This can be used to monitor how
many compressed clusters remain and whether to recompress the image.

Suggested-by: Cole Robinson <crobinso@redhat.com>
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
---
 include/block/block.h        | 1 +
 qapi-schema.json             | 6 +++++-
 qemu-img.c                   | 7 +++++--
 tests/qemu-iotests/044.out   | 1 +
 tests/qemu-iotests/common.rc | 2 +-
 5 files changed, 13 insertions(+), 4 deletions(-)

Patch

diff --git a/include/block/block.h b/include/block/block.h
index ce61883..9661f9a 100644
--- a/include/block/block.h
+++ b/include/block/block.h
@@ -24,6 +24,7 @@  typedef struct BlockFragInfo {
     uint64_t allocated_clusters;
     uint64_t total_clusters;
     uint64_t fragmented_clusters;
+    uint64_t compressed_clusters;
 } BlockFragInfo;
 
 typedef struct QEMUSnapshotInfo {
diff --git a/qapi-schema.json b/qapi-schema.json
index 9831c87..65aea75 100644
--- a/qapi-schema.json
+++ b/qapi-schema.json
@@ -279,6 +279,10 @@ 
 #                       field is present if the driver for the image format
 #                       supports it
 #
+# @compressed-clusters: #optional total number of compressed clusters, this
+#                       field is present if the driver for the image format
+#                       supports it
+#
 # Since: 1.4
 #
 ##
@@ -288,7 +292,7 @@ 
            '*image-end-offset': 'int', '*corruptions': 'int', '*leaks': 'int',
            '*corruptions-fixed': 'int', '*leaks-fixed': 'int',
            '*total-clusters': 'int', '*allocated-clusters': 'int',
-           '*fragmented-clusters': 'int' } }
+           '*fragmented-clusters': 'int', '*compressed-clusters': 'int' } }
 
 ##
 # @StatusInfo:
diff --git a/qemu-img.c b/qemu-img.c
index 0e34bf0..fa9b2af 100644
--- a/qemu-img.c
+++ b/qemu-img.c
@@ -428,10 +428,11 @@  static void dump_human_image_check(ImageCheck *check)
 
     if (check->total_clusters != 0 && check->allocated_clusters != 0) {
         printf("%" PRId64 "/%" PRId64 " = %0.2f%% allocated, "
-               "%0.2f%% fragmented\n",
+               "%0.2f%% fragmented, %0.2f%% compressed clusters\n",
                check->allocated_clusters, check->total_clusters,
                check->allocated_clusters * 100.0 / check->total_clusters,
-               check->fragmented_clusters * 100.0 / check->allocated_clusters);
+               check->fragmented_clusters * 100.0 / check->allocated_clusters,
+               check->compressed_clusters * 100.0 / check->allocated_clusters);
     }
 
     if (check->image_end_offset) {
@@ -472,6 +473,8 @@  static int collect_image_check(BlockDriverState *bs,
     check->has_allocated_clusters   = result.bfi.allocated_clusters != 0;
     check->fragmented_clusters      = result.bfi.fragmented_clusters;
     check->has_fragmented_clusters  = result.bfi.fragmented_clusters != 0;
+    check->compressed_clusters      = result.bfi.compressed_clusters;
+    check->has_compressed_clusters  = result.bfi.compressed_clusters != 0;
 
     return 0;
 }
diff --git a/tests/qemu-iotests/044.out b/tests/qemu-iotests/044.out
index 9c48673..5eed3f8 100644
--- a/tests/qemu-iotests/044.out
+++ b/tests/qemu-iotests/044.out
@@ -1,4 +1,5 @@ 
 No errors were found on the image.
+7292415/8391499= 86.90% allocated, 0.00% fragmented, 0.00% compressed clusters
 Image end offset: 4296447488
 .
 ----------------------------------------------------------------------
diff --git a/tests/qemu-iotests/common.rc b/tests/qemu-iotests/common.rc
index 5ba960b..e522d61 100644
--- a/tests/qemu-iotests/common.rc
+++ b/tests/qemu-iotests/common.rc
@@ -162,7 +162,7 @@  _cleanup_test_img()
 _check_test_img()
 {
     $QEMU_IMG check "$@" -f $IMGFMT $TEST_IMG 2>&1 | \
-        sed -e "/fragmented$/d" \
+        sed -e '/allocated.*fragmented.*compressed clusters/d' \
             -e 's/qemu-img: This image format does not support checks/No errors were found on the image./' \
             -e '/Image end offset: [0-9]\+/d'
 }