[libvirt] [PATCH] rbd: fix 32-bit build

Eric Blake eblake at redhat.com
Tue Feb 23 23:42:28 UTC 2016


%zu is not always synonymous with uint64_t; on 32-bit machines,
size_t is only 32 bits.  Prefer "%llu"/'unsigned long long' when
the variable is under our control, and "%"PRIu64 when we are
stuck with 'uint64_t' from RBD.

Fixes errors such as:

../../src/storage/storage_backend_rbd.c: In function 'virStorageBackendRBDVolWipe':
../../src/storage/storage_backend_rbd.c:1281:15: error: format '%zu' expects argument of type 'size_t', but argument 8 has type 'uint64_t {aka long long unsigned int}' [-Werror=format=]
     VIR_DEBUG("Need to wipe %zu bytes from RBD image %s/%s",
               ^
../../src/util/virlog.h:90:73: note: in definition of macro 'VIR_DEBUG_INT'
     virLogMessage(src, VIR_LOG_DEBUG, filename, linenr, funcname, NULL, __VA_ARGS__)
                                                                         ^
../../src/storage/storage_backend_rbd.c:1281:5: note: in expansion of macro 'VIR_DEBUG'
     VIR_DEBUG("Need to wipe %zu bytes from RBD image %s/%s",
     ^

Signed-off-by: Eric Blake <eblake at redhat.com>
---

Pushing under the build-breaker rule

 src/storage/storage_backend_rbd.c | 28 +++++++++++++++-------------
 1 file changed, 15 insertions(+), 13 deletions(-)

diff --git a/src/storage/storage_backend_rbd.c b/src/storage/storage_backend_rbd.c
index 0591eec..7d04b39 100644
--- a/src/storage/storage_backend_rbd.c
+++ b/src/storage/storage_backend_rbd.c
@@ -23,6 +23,7 @@

 #include <config.h>

+#include <inttypes.h>
 #include "datatypes.h"
 #include "virerror.h"
 #include "storage_backend_rbd.h"
@@ -403,7 +404,7 @@ volStorageBackendRBDRefreshVolInfo(virStorageVolDefPtr vol,
     }

     VIR_DEBUG("Refreshed RBD image %s/%s (capacity: %llu allocation: %llu "
-                      "obj_size: %zu num_objs: %zu)",
+                      "obj_size: %"PRIu64" num_objs: %"PRIu64")",
               pool->def->source.name, vol->name, vol->target.capacity,
               vol->target.allocation, info.obj_size, info.num_objs);

@@ -463,7 +464,8 @@ virStorageBackendRBDRefreshPool(virConnectPtr conn,
     pool->def->available = clusterstat.kb_avail * 1024;
     pool->def->allocation = poolstat.num_bytes;

-    VIR_DEBUG("Utilization of RBD pool %s: (kb: %zu kb_avail: %zu num_bytes: %zu)",
+    VIR_DEBUG("Utilization of RBD pool %s: (kb: %"PRIu64" kb_avail: %"PRIu64
+              " num_bytes: %"PRIu64")",
               pool->def->source.name, clusterstat.kb, clusterstat.kb_avail,
               poolstat.num_bytes);

@@ -1168,8 +1170,8 @@ virStorageBackendRBDVolWipeZero(rbd_image_t image,
 {
     int r = -1;
     int ret = -1;
-    uint64_t offset = 0;
-    uint64_t length;
+    unsigned long long offset = 0;
+    unsigned long long length;
     char *writebuf;

     if (VIR_ALLOC_N(writebuf, info->obj_size * stripe_count) < 0)
@@ -1179,13 +1181,13 @@ virStorageBackendRBDVolWipeZero(rbd_image_t image,
         length = MIN((info->size - offset), (info->obj_size * stripe_count));

         if ((r = rbd_write(image, offset, length, writebuf)) < 0) {
-            virReportSystemError(-r, _("writing %zu bytes failed on "
-                                       "RBD image %s at offset %zu"),
+            virReportSystemError(-r, _("writing %llu bytes failed on "
+                                       "RBD image %s at offset %llu"),
                                        length, imgname, offset);
             goto cleanup;
         }

-        VIR_DEBUG("Wrote %zu bytes to RBD image %s at offset %zu",
+        VIR_DEBUG("Wrote %llu bytes to RBD image %s at offset %llu",
                   length, imgname, offset);

         offset += length;
@@ -1207,8 +1209,8 @@ virStorageBackendRBDVolWipeDiscard(rbd_image_t image,
 {
     int r = -1;
     int ret = -1;
-    uint64_t offset = 0;
-    uint64_t length;
+    unsigned long long offset = 0;
+    unsigned long long length;

     VIR_DEBUG("Wiping RBD %s volume using discard)", imgname);

@@ -1216,13 +1218,13 @@ virStorageBackendRBDVolWipeDiscard(rbd_image_t image,
         length = MIN((info->size - offset), (info->obj_size * stripe_count));

         if ((r = rbd_discard(image, offset, length)) < 0) {
-            virReportSystemError(-r, _("discarding %zu bytes failed on "
-                                       "RBD image %s at offset %zu"),
+            virReportSystemError(-r, _("discarding %llu bytes failed on "
+                                       "RBD image %s at offset %llu"),
                                      length, imgname, offset);
             goto cleanup;
         }

-        VIR_DEBUG("Discarded %zu bytes of RBD image %s at offset %zu",
+        VIR_DEBUG("Discarded %llu bytes of RBD image %s at offset %llu",
                   length, imgname, offset);

         offset += length;
@@ -1278,7 +1280,7 @@ virStorageBackendRBDVolWipe(virConnectPtr conn,
         goto cleanup;
     }

-    VIR_DEBUG("Need to wipe %zu bytes from RBD image %s/%s",
+    VIR_DEBUG("Need to wipe %"PRIu64" bytes from RBD image %s/%s",
               info.size, pool->def->source.name, vol->name);

     switch ((virStorageVolWipeAlgorithm) algorithm) {
-- 
2.5.0




More information about the libvir-list mailing list