[libvirt] [PATCH] storage: Fix volStorageBackendRBDRefreshVolInfo

Yi Li yili at winhong.com
Tue Oct 29 04:00:14 UTC 2019


Fix the return value status comparison checking for call to
volStorageBackendRBDRefreshVolInfo introduced by commit id f46d137e.

we only should fail when the return is < 0. -ENOENT, -ETIMEDOUT will
ignore according commit id f46d137e.

Signed-off-by: Yi Li <yili at winhong.com>
---
 src/storage/storage_backend_rbd.c | 40 ++++++++++++++++++++++++---------------
 1 file changed, 25 insertions(+), 15 deletions(-)

diff --git a/src/storage/storage_backend_rbd.c b/src/storage/storage_backend_rbd.c
index 7ce26ed..1551cf4 100644
--- a/src/storage/storage_backend_rbd.c
+++ b/src/storage/storage_backend_rbd.c
@@ -411,6 +411,7 @@ volStorageBackendRBDGetFeatures(rbd_image_t image,
     int r, ret = -1;
 
     if ((r = rbd_get_features(image, features)) < 0) {
+        ret = r;
         virReportSystemError(-r, _("failed to get the features of RBD image "
                                  "%s"), volname);
         goto cleanup;
@@ -427,16 +428,19 @@ volStorageBackendRBDGetFlags(rbd_image_t image,
                              const char *volname,
                              uint64_t *flags)
 {
-    int rc;
+    int r, ret = -1;
 
-    if ((rc = rbd_get_flags(image, flags)) < 0) {
-        virReportSystemError(-rc,
+    if ((r = rbd_get_flags(image, flags)) < 0) {
+        ret = r;
+        virReportSystemError(-r,
                              _("failed to get the flags of RBD image %s"),
                              volname);
-        return -1;
+        goto cleanup;
     }
+    ret = 0;
 
-    return 0;
+ cleanup:
+    return ret;
 }
 
 static bool
@@ -470,6 +474,7 @@ virStorageBackendRBDSetAllocation(virStorageVolDefPtr vol,
     if ((r = rbd_diff_iterate2(image, NULL, 0, info->size, 0, 1,
                                &virStorageBackendRBDRefreshVolInfoCb,
                                &allocation)) < 0) {
+        ret = r;
         virReportSystemError(-r, _("failed to iterate RBD image '%s'"),
                              vol->name);
         goto cleanup;
@@ -525,24 +530,28 @@ volStorageBackendRBDRefreshVolInfo(virStorageVolDefPtr vol,
     uint64_t flags;
 
     if ((r = rbd_open_read_only(ptr->ioctx, vol->name, &image, NULL)) < 0) {
-        ret = -r;
+        ret = r;
         virReportSystemError(-r, _("failed to open the RBD image '%s'"),
                              vol->name);
         goto cleanup;
     }
 
     if ((r = rbd_stat(image, &info, sizeof(info))) < 0) {
-        ret = -r;
+        ret = r;
         virReportSystemError(-r, _("failed to stat the RBD image '%s'"),
                              vol->name);
         goto cleanup;
     }
 
-    if (volStorageBackendRBDGetFeatures(image, vol->name, &features) < 0)
+    if ((r = volStorageBackendRBDGetFeatures(image, vol->name, &features)) < 0) {
+        ret = r;
         goto cleanup;
+    }
 
-    if (volStorageBackendRBDGetFlags(image, vol->name, &flags) < 0)
+    if ((r = volStorageBackendRBDGetFlags(image, vol->name, &flags)) < 0) {
+        ret = r;
         goto cleanup;
+    }
 
     vol->target.capacity = info.size;
     vol->type = VIR_STORAGE_VOL_NETWORK;
@@ -555,8 +564,11 @@ volStorageBackendRBDRefreshVolInfo(virStorageVolDefPtr vol,
                   "Querying for actual allocation",
                   def->source.name, vol->name);
 
-        if (virStorageBackendRBDSetAllocation(vol, image, &info) < 0)
+        if ((r = virStorageBackendRBDSetAllocation(vol, image, &info) < 0)) {
+            ret = r;
             goto cleanup;
+        }
+
     } else {
         vol->target.allocation = info.obj_size * info.num_objs;
     }
@@ -734,12 +746,10 @@ virStorageBackendRBDRefreshPool(virStoragePoolObjPtr pool)
          *
          * Do not error out and simply ignore the volume
          */
-        if (r < 0) {
-            if (r == -ENOENT || r == -ETIMEDOUT)
-                continue;
-
+        if (r == -ENOENT || r == -ETIMEDOUT)
+            continue;
+        else if (r < 0)
             goto cleanup;
-        }
 
         if (virStoragePoolObjAddVol(pool, vol) < 0)
             goto cleanup;
-- 
2.7.5






More information about the libvir-list mailing list