]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
common: Fix multiple logical errors in get_device_id.
authorAlex Zhang <difan@google.com>
Sun, 29 Sep 2019 09:33:58 +0000 (02:33 -0700)
committerAlex Zhang <difan@google.com>
Thu, 21 Nov 2019 11:26:26 +0000 (03:26 -0800)
0. If blkdev.serial exists, the serial should be used. The original impl seems wrong (if serial does not exist, then use the value from the uninitialized buffer, or even worse, use the value from the last call (model))
1. When using fallback methods, device id should only be returned when both model and serial are present. The original impl looks like a logical error.

Signed-off-by: Difan Zhang <difan@google.com>
src/common/blkdev.cc

index 4da2be6a4c37eb39b4e16cdce3a4c86406b42c10..6c16587437b33e27fa02f619a5b1a5aef2befe4a 100644 (file)
@@ -542,15 +542,22 @@ std::string get_device_id(const std::string& devname,
   if (!blkdev.model(buf, sizeof(buf))) {
     model = buf;
   }
-  if (blkdev.serial(buf, sizeof(buf))) {
+  if (!blkdev.serial(buf, sizeof(buf))) {
     serial = buf;
   }
-  if (!model.size() || serial.size()) {
-    if (err) {
+  if (err) {
+    if (model.empty() && serial.empty()) {
+      *err = std::string("fallback method has no model nor serial'");
+      return {};
+    } else if (model.empty()) {
       *err = std::string("fallback method has serial '") + serial
-       + "'but no model";
+        + "' but no model'";
+      return {};
+    } else if (serial.empty()) {
+      *err = std::string("fallback method has model '") + model
+        + "' but no serial'";
+      return {};
     }
-    return {};
   }
 
   device_id = model + "_" + serial;