]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
common/blkdev: return optional error string from get_device_id
authorSage Weil <sage@redhat.com>
Fri, 21 Dec 2018 16:43:38 +0000 (10:43 -0600)
committerSage Weil <sage@redhat.com>
Tue, 1 Jan 2019 16:59:36 +0000 (10:59 -0600)
Signed-off-by: Sage Weil <sage@redhat.com>
src/common/blkdev.cc
src/common/blkdev.h

index 3a4fab7b319d5e1424f301ddfdabb5329ce7d479..48ddbc8781d14d99ee3a53515963818cac49a8c3 100644 (file)
@@ -395,7 +395,8 @@ bool get_vdo_utilization(int fd, uint64_t *total, uint64_t *avail)
 
 // trying to use udev first, and if it doesn't work, we fall back to 
 // reading /sys/block/$devname/device/(vendor/model/serial).
-std::string get_device_id(const std::string& devname)
+std::string get_device_id(const std::string& devname,
+                         std::string *err)
 {
   struct udev_device *dev;
   static struct udev *udev;
@@ -403,10 +404,17 @@ std::string get_device_id(const std::string& devname)
 
   udev = udev_new();
   if (!udev) {
+    if (err) {
+      *err = "udev_new failed";
+    }
     return {};
   }
   dev = udev_device_new_from_subsystem_sysname(udev, "block", devname.c_str());
   if (!dev) {
+    if (err) {
+      *err = std::string("udev_device_new_from_subsystem_sysname failed on '")
+       + devname + "'";
+    }
     udev_unref(udev);
     return {};
   }
@@ -474,6 +482,10 @@ std::string get_device_id(const std::string& devname)
     serial = buf;
   }
   if (!model.size() || serial.size()) {
+    if (err) {
+      *err = std::string("fallback method has serial '") + serial
+       + "'but no model";
+    }
     return {};
   }
 
@@ -788,9 +800,13 @@ bool get_vdo_utilization(int fd, uint64_t *total, uint64_t *avail)
   return false;
 }
 
-std::string get_device_id(const std::string& devname)
+std::string get_device_id(const std::string& devname,
+                         std::string *err)
 {
   // FIXME: implement me for freebsd
+  if (err) {
+    *err = "not implemented for FreeBSD";
+  }
   return std::string();
 }
 
@@ -915,9 +931,13 @@ bool get_vdo_utilization(int fd, uint64_t *total, uint64_t *avail)
   return false;
 }
 
-std::string get_device_id(const std::string& devname)
+std::string get_device_id(const std::string& devname,
+                         std::string *err)
 {
   // not implemented
+  if (err) {
+    *err = "not implemented";
+  }
   return std::string();
 }
 
index 637754deb2c6650d8332a040aeb38418a84d383e..e32d806195692f4b8f5fdb1df6b242f29e8f457f 100644 (file)
@@ -21,7 +21,8 @@ enum blkdev_prop_t {
 extern int get_device_by_path(const char *path, char* partition, char* device, size_t max);
 
 
-extern std::string get_device_id(const std::string& devname);
+extern std::string get_device_id(const std::string& devname,
+                                std::string *err=0);
 extern void get_dm_parents(const std::string& dev, std::set<std::string> *ls);
 extern int block_device_run_smartctl(const char *device, int timeout,
                                     std::string *result);