From: Sage Weil Date: Fri, 21 Dec 2018 16:43:38 +0000 (-0600) Subject: common/blkdev: return optional error string from get_device_id X-Git-Tag: v14.1.0~499^2~7 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=8e5e2ceaf45cad55c4db2fa4f43ef12baeecef8b;p=ceph.git common/blkdev: return optional error string from get_device_id Signed-off-by: Sage Weil --- diff --git a/src/common/blkdev.cc b/src/common/blkdev.cc index 3a4fab7b319d..48ddbc8781d1 100644 --- a/src/common/blkdev.cc +++ b/src/common/blkdev.cc @@ -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(); } diff --git a/src/common/blkdev.h b/src/common/blkdev.h index 637754deb2c6..e32d80619569 100644 --- a/src/common/blkdev.h +++ b/src/common/blkdev.h @@ -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 *ls); extern int block_device_run_smartctl(const char *device, int timeout, std::string *result);